进程间通信编程--管道
来源:互联网 发布:预决算软件有哪些 编辑:程序博客网 时间:2024/06/14 00:17
创建两个管道,每个方向一个。步骤如下:
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开发notification跳转
- IOS 网络解析(XML,JSON)
- 第15周项目2
- usaco Barn Repair 解题报告
- 具备全程事务控制的JDBC连接管理器
- 进程间通信编程--管道
- Linux静态库与动态库详解(一看就懂)
- 窗口的美化2
- Lucene学习总结之一:全文检索的基本原理
- VBScript: 根据窗口的标题关闭窗口
- android的GPS HAL架构
- Apache无法启动解决 the requested operation has failed
- 虚拟化、云计算、开放源代码及其他
- HTML5 Web存储实现离线工作