Linux —system、popen函数用法
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Linux —system、popen函数用法,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1755字,纯文字阅读大概需要3分钟。
内容图文
![Linux —system、popen函数用法](/upload/InfoBanner/zyjiaocheng/931/1c6fc954f8ec468db80b4beb34ffe1bc.jpg)
Linux —system、popen函数用法
一、system()函数
system()会调用fork()产生子进程,由子进程来调用/bin/sh-c string来执行参数string字 符串所代表的命令,此命令执行完后随即返回原调用的进程。在调用system()期间SIGCHLD 信号会被暂时搁置,SIGINT和SIGQUIT 信号则会被忽略。
1、原型:
#include <stdlib.h>
int system(const char *command);
2、返回值:
如果system()在调用/bin/sh时失败则返回127,其他失败原因返回-1。若参数string为空指针(NULL),则返回非零值。
如果system()调用成功则最后会返回执行shell命令后的返回值,但是此返回值也有可能为 system()调用/bin/sh失败所返回的127,因此最好能再检查errno 来确认执行成功。
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
int main(int argc,char **argv)
{
if(system("main aa bbb") == -1){
printf("system faill\n");
perror("why:");
}
printf("system susess\n");
system("pause");
return 0;
}
运行结果:
CLC@Embed_Learn:~$ gcc system.c
CLC@Embed_Learn:~$ ./a.out
argv[0]=main
argv[1]=aa
argv[2]=bbb
sh: 1: pause: not found
system susess
sh: 1: pause: not found
二、popen()函数
相比system/exec族函数好处,可以将程序运行的结果放到一个管道中方便捕获信息。
原型:
#include <stdio.h>
FILE *popen(const char *command, const char *type);
int pclose(FILE *stream);
参数说明:
command: 是指向以NULL结束的shell命令字符串的指针。
type: 权限;读、写(w、r)。
返回值:
如果调用成功,返回一个读\写指针,否则返回NULL
demo测试:
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
char readbuf[1024];
FILE *fd;
fd = popen("ps","r");
fread(readbuf,1024,1,fd);
printf("readbuf=\n%s\n",readbuf);
pclose(fd);
system("pause");
return 0;
}
运行结果:
CLC@Embed_Learn:~$ ./a.out
readbuf=
PID TTY TIME CMD
2870 pts/0 00:00:01 bash
9024 pts/0 00:00:00 a.out
9025 pts/0 00:00:00 sh
9026 pts/0 00:00:00 ps
sh: 1: pause: not found
内容总结
以上是互联网集市为您收集整理的Linux —system、popen函数用法全部内容,希望文章能够帮你解决Linux —system、popen函数用法所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。