博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Linux system函数详解
阅读量:5169 次
发布时间:2019-06-13

本文共 1163 字,大约阅读时间需要 3 分钟。

system功能:system()函数调用"/bin/sh -c command"执行特定的命令,阻塞当前进程直到command命令执行完毕原型    int system(const char *command);返回值:    如果无法启动shell运行命令,system将返回127;出现不能执行system调用的其他错误时返回-1。如果systenm能够顺利执行,返回那个命令的退出码    system函数执行时,内部会调用fork,execve,waitpid等函数。
#include 
#include
#include
#include
#include
#include
#include
//自己实现system函数int my_system(const char * command){ if(command==NULL) { printf("command not allow null!\n"); return -1; } pid_t pid = 0; int status=0; pid = fork(); if (pid < 0) { status=-1; } if(pid==0) { //执行shell命令 execle("/bin/sh","sh","-c",command,NULL,NULL); exit(127); }else if(pid>0) { //先执行一次waitpid,但是要处理阻塞中的信号中断 while(waitpid(pid,&status,0)<0) { if(errno==EINTR) //如果是信号中断,应该一直执行一次waitpid,直到等待子进程返回 continue; //发现不是信号中断,导致waitpid返回-1,直接退出,表明此时父进程已经成功接收到子进程的pid //特别注明:执行到这里,说明waitpid已经执行失败,如果能成功接收到子进程的pid,应该不会进入while循环 status=-1; break; } } return status;}int main(int arg, char *args[]){ char buf[1024]={ 0}; read(STDIN_FILENO,buf,sizeof(buf)); my_system(buf); return 0;}

 

转载于:https://www.cnblogs.com/zhanggaofeng/p/6074152.html

你可能感兴趣的文章
【ADO.NET基础-数据加密】第一篇(加密解密篇)
查看>>
STL中的优先级队列priority_queue
查看>>
UE4 使用UGM制作血条
查看>>
浏览器对属性兼容性支持力度查询网址
查看>>
虚拟机长时间不关造成的问题
查看>>
面试整理:Python基础
查看>>
Program exited with code **** 相关解释
查看>>
tableView
查看>>
Happy Great BG-卡精度
查看>>
Xamarin Visual Studio不识别JDK路径
查看>>
菜鸟“抄程序”之道
查看>>
Ubuntu下关闭防火墙
查看>>
TCP/IP 邮件的原理
查看>>
原型设计工具
查看>>
windows下的C++ socket服务器(4)
查看>>
css3 2d转换3d转换以及动画的知识点汇总
查看>>
【Java】使用Eclipse进行远程调试,Linux下开启远程调试
查看>>
对Vue为什么不支持IE8的解释之一
查看>>
计算机改名导致数据库链接的诡异问题
查看>>
Java8内存模型—永久代(PermGen)和元空间(Metaspace)(转)
查看>>