system函数1
头文件:
#include <stdlib.h>
函数原型:
int system(const char *command);
返回值:
- 成功,则返回进程的状态值;
- 当sh不能执行时,返回127;
- 失败返回-1;
system()在调用/bin/sh时失败则返回127
其他失败原因返回-1
若参数string为空指针(NULL),则返回非零值
如果 system()调用成功则最后会返回执行shell命令后的返回值,但是此返回值也有可能为system()调用/bin/sh失败所返回的127,因此最好能再检查errno 来确认执行成功。
执行写法:
- sh -c ./a.out
- sh -c ./new
- sh -c new
实现源码:
#include <stdlib.h>
int system(const char * cmdstring)
{
pid_t pid;
int status;
if(cmdstring == NULL){
return (1);
}
if((pid = fork())<0){
status = -1;
}
else if(pid == 0){
execl("/bin/sh", "sh", "-c", cmdstring, (char *)0);
-exit(127); //子进程正常执行则不会执行此语句
}
else{
while(waitpid(pid, &status, 0) < 0){
if(errno != EINTER){
status = -1;
break;
}
}
}
return status;
}
示例代码:
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
if(system("ps") == -1)
{
printf("system failed!\n");
}
printf("after system\n");
return 0;
}
system函数跟execl不同的是还会回到原程序中执行system后的代码,exec就不会回来,再执行调用execl函数后的代码