进程间通信编程--管道
来源:互联网 发布:mac os qq 英文 编辑:程序博客网 时间:2024/06/05 18:34
创建两个管道,每个方向一个。步骤如下:
1.创建管道1(fd1[0]和fd1[1])和管道2(fd2[0]和fd2[1]);
2.fork;
3.父进程关闭管道1的读出端(fd[0])
4.父进程关闭管道2的写入端(fd2[1])
5.子进程关闭管道1的写入端(fd1[1])
6.子进程关闭管道2的读出端(fd2[0])
#include<stdio.h>
#include<stdlib.h>#include<unistd.h>
#include<sys/types.h>
#include<sys/wait.h>
#include<fcntl.h>
#include<string.h>
#include<errno.h>
#define MAXLINE 256
void client(int readfd,int writefd);
void server(int readfd,int writefd);
int main(int argc,char *argv[])
{
int pipe1[2],pipe2[2];
pid_t childpid;
pipe(pipe1);
pipe(pipe2);
if ((childpid=fork())==0)
{
close(pipe1[1]);
close(pipe2[0]);
server(pipe1[0],pipe2[1]);
exit(0);
}
close(pipe1[0]);
close(pipe2[1]);
client(pipe2[0],pipe1[1]);
waitpid(childpid,NULL,0);
exit(0);
}
void client(int readfd,int writefd)
{
size_t len;
ssize_t n;
char buff[MAXLINE];
fgets(buff,MAXLINE,stdin);
len=strlen(buff);
if (buff[len-1]=='\n') len--;
write(writefd,buff,len);
while((n=read(readfd,buff,MAXLINE))>0)
write(STDOUT_FILENO,buff,n);
}
void server(int readfd,int writefd)
{
int fd;
ssize_t n;
char buff[MAXLINE+1];
if ((n=read(readfd,buff,MAXLINE))==0)
printf("end-of-file while reading pathname\n");
buff[n]='\0';
if ((fd=open(buff,O_RDONLY))<0)
{
snprintf(buff+n,sizeof(buff)-n, ":can't open, %s\n",strerror(errno));
n=strlen(buff);
write(writefd,buff,n);
}
else
{
while((n=read(fd,buff,MAXLINE))>0)
write(writefd,buff,n);
close(fd);
}
}
程序运行结果:
- 进程间通信编程--管道
- 进程间通信编程--管道
- 进程间通信编程(2) - 无名管道
- 进程间通信编程(3) - 有名管道
- Linux编程:进程间通信--管道
- Unix网络编程--进程间通信--管道通信
- 进程间管道通信
- 进程间通信: 管道
- 进程间通信--管道
- 进程间通信----管道
- 进程间通信--管道
- 进程间通信--管道
- 进程间通信----管道
- 进程间通信----管道
- 进程间通信--管道
- 进程间通信--管道
- 进程间通信--管道
- 进程间通信-管道
- Android中mesure过程详解
- ecshop与jquery冲突的解决办法
- Hessian 使用示例总结
- C语言的一些东西
- YII 用AJAX上传图片
- 进程间通信编程--管道
- jbpm学习笔记(四)--请假流程的设计(1)
- /etc/resolv.conf 的更改在重启后丢失的解决办法
- 编程之美——寻找最近点对
- 常用SQL基础
- 简单 dtd 实例编写
- ZOJ 2562
- 制做jffs2文件系统
- 你可能不知道的Shell