/*********************************************************************  * Author  : Samson  * Date    : 03/13/2015  * Test platform:  *              3.13.0-24-generic  *              GNU bash, 4.3.11(1)-release  * ************************************…
在GNU Linux C编程中,要想进行系统命令的执行的话,只提供了system接口,但是此接口并不能得到命令执行后所输出的值,而只能够得到命令是否执行成功的结果.仅仅这样的功能还是不够的,有的时候是要必须通过命令的输出来判断下一步的结果或步骤的,那么怎么样能够得到system命令执行的结果呢?那就可以使用到popen函数和fgets函数进行命令的输出信息的获取了,实际例子如下: 注意:此接口只能够获取命令输出的最后一行的信息,若有多行输出信息将不能够全部获取到,此封装接口只适用于得到命令执行结…
linux下,system函数和execl函数都是用于执行一条系统命令.今天仔细看了system函数的实现,想找出和execl函数的差别. 这里先进行一些背景知识补充: fork(创建一个新的进程): 定义函数  pid_t fork(void); 函数说明  fork()会产生一个新的子进程,其子进程会复制父进程的数据与堆栈空间,并继承父进程的用户代码,组代码,环境变量.已打开的文件代码.工作目录和资源限制等. 返回值    如果fork()成功则在父进程会返回新建立的子进程代码(PID),而…
对于system这个函数的功能早就有一定了解,读书期间,就学习了UNIX系统编程这本书,后来买了APUE.我这个人总是有好读书不求甚解的毛病.对于system函数只知其一,不知其二.后来被人问起相关的问题,结果丢了脸.书到用时方恨自己不求甚解.今天仔细探查了下system的一些特性.       APUE这本书,对system这个函数已经将的比较明白了,只是它的相关知识稍显分散.最开始我是去网上找的资料,自己写的测试代码,可是还是有很多迷惑的地方.后来才拿起APUE ,好好读了第八章和第十章的相…
网上关于system函数的返回值说明很多很详细但却不直观,这里搬出apue 3rd Editon中实现system函数的代码来说明其返回值. #include <sys/wait.h> #include <errno.h> #include <unistd.h> int system(const char *cmdstring) { pid_t pid; int status; /* version without signal handling */ if (cmds…
例: status = system("./test.sh"); 1.先统一两个说法: (1)system返回值:指调用system函数后的返回值,比如上例中status为system返回值 (2)shell返回值:指system所调用的shell命令的返回值,比如上例中,test.sh中返回的值为shell返回值.   2.如何正确判断test.sh是否正确执行? 仅判断status是否==0?或者仅判断status是否!=-1?    都错!   3.man中对于system的说明…
system 功能:system()函数调用"/bin/sh -c command"执行特定的命令,阻塞当前进程直到command命令执行完毕 原型 int system(const char *command); 返回值: 如果无法启动shell运行命令,system将返回127:出现不能执行system调用的其他错误时返回-.如果systenm能够顺利执行,返回那个命令的退出码 system函数执行时,内部会调用fork,execve,waitpid等函数. #include &l…
system()函数功能强大,很多人用却对它的原理知之甚少先看linux版system函数的源码: #include <sys/types.h> #include <sys/wait.h> #include <errno.h> #include <unistd.h> int system(const char * cmdstring) { pid_t pid; int status; if(cmdstring == NULL){ ); } ){ status…
原谅: http://blog.sina.com.cn/s/blog_8043547601017qk0.html 这几天调程序(嵌入式linux),发现程序有时就莫名其妙的死掉,每次都定位在程序中不同的system()函数,直接在shell下输入system()函数中调用的命令也都一切正常.就没理这个bug,以为是其他的代码影响到这个,或是内核驱动文件系统什么的异常导致,昨天有出现了这个问题,就随手百了一下度,问题出现了,很多人都说system()函数要慎用要少用要能不用则不用,system()…
最近在看APUE第10章中关于system函数的POSIX.1的实现.关于POSIX.1要求system函数忽略SIGINT和SIGQUIT,并且阻塞信号SIGCHLD的论述,理解得不是很透彻,本文就通过实际的实例来一探究竟吧. 一.为什么要阻塞SIGCHLD信号 #include <stdlib.h> int system(const char *command); 函数工作大致流程:system()函数先fork一个子进程,在这个子进程中调用/bin/sh -c来执行command指定的命…