C語言中呼叫系統命令(system popen...)
阿新 • • 發佈:2019-01-10
1、system(執行shell 命令)
相關函式 fork,execve,waitpid,popen
表頭檔案 #include<stdlib.h>
定義函式 int system(const char * string);
函式說明 system()會呼叫fork()產生子程序,由子程序來呼叫/bin/sh-cstring來執行引數string字串所代表的命令,此命令執行完後隨即返回原呼叫的程序。在呼叫system()期間SIGCHLD 訊號會被暫時擱置,SIGINT和SIGQUIT 訊號則會被忽略。返回值
如果system()在呼叫/bin/sh時失敗則返回127,其他失敗原因返回-
範例:
#include<stdlib.h>
main()
{
system(“ls -al /etc/passwd /etc/shadow”);
}
2、popen(建立管道I/O)
相關函式 pipe,mkfifo,pclose,fork,system,fopen
表頭檔案 #include<stdio.h>
定義函式 FILE * popen( const char * command,const char * type);
函式說明 popen()會呼叫fork()產生子程序,然後從子程序中呼叫/bin/sh -c來執行引數command的指令。引數type可使用“r”代表讀取,“w”
範例:
#include<stdio.h> main()
{
FILE
* fp;
char buffer[80];
fp=popen(“cat
/etc/passwd”,”r”);
fgets(buffer, sizeof (buffer),fp);
printf(“%s”,buffer);
pclose(fp);
}
|
執行 root :x:0 0: root: /root: /bin/bash
3、使用vfork()新建子程序,然後呼叫exec函式族
#include<unistd.h>
main()
{
char* argv[ ]={“ls”,”-al”,”/etc/passwd”,(char*) };
if(vfork() ==0)
{
execv(“/bin/ls”,argv);
}else{
printf(“This is the parent process\n”);
}
}