龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > C/C++开发 >

利用管道进行进程的通信示例

时间:2009-12-22 15:42来源:未知 作者:admin 点击:
分享到:
这里用到了 pipe 管道函数: int pipe(int file_descriptor[2]); 函数 pipe 填充的两个整数的含义是两个文件描述符,任何向 file_descriptor[1] 写入的数据,可以从 file_descriptor[0] 中读取,并且写入的数据符

  这里用到了 pipe 管道函数:

  

int pipe(int file_descriptor[2]);

  

函数 pipe 填充的两个整数的含义是两个文件描述符,任何向 file_descriptor[1] 写入的数据,可以从 file_descriptor[0] 中读取,并且写入的数据符合先入先出的规则.

  

  

例 pipe.c:

  

  

#include

  

#include

  

#include

  

#include

  

  

int main()

  

{

  

int data_processed;

  

int file_pipes[2];

  

const char some_data[]="123";

  

char buffer[BUFSIZ+1];

  

int fork_result;

  

  

memset(buffer,'\0',sizeof(buffer));

  

  

if(pipe(file_pipes)==0){

  

fork_result=fork(); /* 设置进程 */

  

if (fork_result==-1){

  

/* 判定设置进程是否出错 */

  

fprintf(stderr,"Fork failure");

  

exit(EX99v_FAILURE);

  

}

  

  

/* 下面判定,若是是子进程则读管道数据,父进程则向管道写数据 */

  

  

if(fork_result==0){

  

/* 判定是否子进程 */

  

data_processed=read(file_pipes[0],buffer,BUFSIZ);

  

/* 从管道读数据 */

  

printf("Read %d bytes:%s

",data_processed,buffer);

  

exit(EX99v_SUCCESS);

  

} else {

  

/* 父进程 */

  

data_processed=write(file_pipes[1],some_data,strlen(some_data));

  

/* 向管道写数据 */

  

printf("Wrote %d bytes

",data_processed);

  

}

  

}

  

exit(EX99v_SUCCESS);

  

}

  

  

程序运行:./pipe

  

执行结果:

  

Wrote 3 bytes

  

Read 3 bytes:123

  

利用管道进行通信成功!^o^

  

精彩图集

赞助商链接