我们经常用linux中的system函数来执行命令, 下面, 我们简要模拟一下system函数的行为, 以便对system函数有更深入的理解, 代码如下:
#include <stdio.h>
#include <unistd.h>
#include <errno.h>
int mySystem(const char *cmdstring)
{
pid_t pid = 0;
int status = 0;
if(NULL == cmdstring)
{
printf("error0\n");
return -1;
}
if((pid = fork()) < 0)
{
printf("error1\n");
return -1;
}
if(0 == pid)
{
execl("/bin/sh", "sh", "-c", cmdstring, (char *)0);
printf("error2\n");
return -1;
}
while(waitpid(pid, &status, 0) < 0)
{
if(errno != EINTR)
{
printf("error3\n");
return -1;
}
}
return 0;
}
int main()
{
mySystem("ls -l");
mySystem("pwd");
mySystem("date");
mySystem("xxx");
return 0;
}
执行结果为:
[taoge@localhost learn_c]$ ./a.out
total 12
-rwxrwxr-x 1 taoge taoge 5359 May 4 08:17 a.out
-rwxrw-rw- 1 taoge taoge 716 May 4 08:17 test.c
/home/taoge/Desktop/learn_c
Mon May 4 08:19:16 PDT 2015
sh: xxx: command not found
[taoge@localhost learn_c]$
当然, 不得不说, 实际的system要比我上面的mySystem更复杂更完善。