linux中popen() 函数与system () 详解

linux的popen() 函数详解

popen() 可以在调用程序和POSIX shell /usr/bin/sh 要执行的命令之间创建一个管道(请参阅sh-posix(1) )。
popen() 的参数是指向以空字符结尾的字符串的指针,这些字符串分别包含一个shell 命令行和一个I/O 模式,此模式可以是进行读取的r ,或进行写入的w 。
popen() 可返回一个流指针,这样,当I/O 模式为w 时,便可以通过写入文件stream 来写入到命令的标准输入;
当I/O 模式为r 时,通过从文件stream 读取数据,从命令的标准输出读取数据。
popen() 打开的流应由pclose() 关闭,这需要等待终止关联的进程,然后返回命令的退出状态。

 

linux的system () 函数详解

system(执行shell 命令)
相关函数
        fork,execve,waitpid,popen
表头文件
        #include
定义函数
        int system(const char * string);
函数说明
        system()会调用fork()产生子进程,由子进程来调用/bin/sh-c string来执行参数string字符串所代表的命令,此命>令执行完后随即返回原调用的进程。在调用system()期间SIGCHLD 信号会被暂时搁置,SIGINT和SIGQUIT 信号则会被忽略。
返回值:
        如果system()在调用/bin/sh时失败则返回127,其他失败原因返回-1。若参数string为空指针(NULL),则返回非零值。
如果system()调用成功则最后会返回执行shell命令后的返回值但是此返回值也有可能为 system()调用/bin/sh失败所返回的127,因此最好能再检查errno 来确认执行成功。
附加说明
        在编写具有SUID/SGID权限的程序时请勿使用system(),system()会继承环境变量,通过环境变量可能会造成系统安全的问题

 

你可能感兴趣的:(linux,popen,创建管道,system,fork子进程)