Linux下C编程,进程通信之标准流管道通信(即系统调用)
2013-03-29 23:33
597 查看
Linux下C编程,进程通信之标准流管道通信(即系统调用)
1.概述在编程的过程中总会需要使用系统调用,如linux下的ps,touch,rm,grep命令等;windows下的dir,mkdir,del命令等。
在linux中执行系统调用,通常使用标准流管道。
标准流管道将一系列的创建过程合并到一个函数popen()中。poen完成的工作有以下几步:
(1)创建一个管道。
(2)fork一个子进程。
(3)在父子进程中关闭不需要的文件描述符。
(4)执行exec函数族调用。
(5)执行函数中所指定的命令。
2.[b]主要函数说明[/b]
FILE*popen(const char*command,const char*type)
(1)command:指向的是一个以null结束符结尾的字符串,这个字符串包含一个shell命令,并被送到/bin/sh以-c参数执行,即由shell来执行。如:ps -ef | grep root
(2)type:“r”,文件指针连接到command的标准输出,即该命令的结果产生输出;“w”:文件指针连接到command的标准输入,即该命令的结果产生输入
(3)返回值文件描述符。当type='r',可以读取命令的执行结果;当type='w',可以给命令输入参数。
3.函数使用说明
3.1执行命令并读取执行结果
#include<stdio.h> #include<unistd.h> #include<stdlib.h> #include<fcntl.h> int main() { FILE *fp; ///文件指针 char buf[1000]; ///缓冲区大小 if((fp=popen("ps -ef | grep ^rte","r"))==NULL) ///使用popen()函数,执行shell命令 return 1; while((fgets(buf,1000,fp))!=NULL) ///根据文件描述符读取命令的输出结果 printf("%s",buf); pclose(fp); ///关闭文件描述符 exit(0); return 0; }
程序输出结果:
3.2执行命令并输入参数
#include<stdio.h> #include<unistd.h> #include<stdlib.h> #include<fcntl.h> int main() { FILE *fp; char *cmd="cat > aaa"; ///该命令新建一个文件,提示用户输入数据作为其内容 char buf[1000]="ni hao wo de peng you!\n"; ///待输入的参数 if((fp=popen(cmd,"w"))==NULL) return 1; fwrite(buf,sizeof(char),1000,fp); ///通过文件描述符写入文件数据 pclose(fp); ///关闭文件描述符 exit(0); return 0; }
查看结果:(新建了文件aaa,并输入了指定的数据)
相关文章推荐
- Linux下C编程,进程通信之标准流管道通信(即系统调用)
- linux下系统调用编程socket进程通信---(1)
- Linux系统进程控制编程(五)——popen函数调用
- Linux 系统编程笔记 守护进程,进程通信
- 九、Linux系统编程-进程(二)fork系统调用、复制进程映像、写时复制、孤儿进程和僵尸进程
- Linux下C编程-----文件操作(1) 通过系统调用简单操作标准输入、标准输出、标准错误
- 【linux草鞋应用编程系列】_1_ 开篇_系统调用IO接口与标准IO接口
- Linux系统进程控制编程(二)——fork系统调用
- 二、linux IO 编程---系统调用和POSIX标准和标准IO
- Linux系统进程控制编程---popen函数调用
- Linux下的C编程实战(开发平台搭建,文件系统编程,进程控制与进程通信编程,“线程”控制与“线程”通信编程,驱动程序设计,专家问答)
- Linux系统进程控制编程---system系统调用
- linux系统编程之进程(四):wait/waitpid函数与僵尸进程、fork 2 times
- linux系统编程之进程(五):终端、作业控制与守护进程
- Linux中获取某个进程的系统调用以及参数(故障排查案例)
- linux应用编程笔记(5)系统调用文件编程方法实现文件复制
- Linux系统编程----孤儿进程
- linux基础编程:进程通信之信号
- Linux 系统应用编程——标准I/O
- Linux进程间的通信--管道通信