pipe,父子进程实现读写交换数据(linux)
2015-04-13 15:13
344 查看
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>
#include <string.h>
void child_rw_pipe(int readfd,int writefd)
{
char *message1 = "from child process\n";
write(writefd,message1,strlen(message1)+1);
char message2[100]={'\0'};
read(readfd,message2,100);
printf("child read from pipe :%s\n",message2);
}
void parent_rw_pipe(int readfd,int writefd)
{
char *message1 = "from parent process\n";
write(writefd,message1,strlen(message1)+1);
char message2[100]={'\0'};
read(readfd,message2,100);
printf("parent read from pipe :%s\n",message2);
}
int main(void)
{
int childfd[2],parentfd[2];
pid_t pid;
int stat_val;
if(pipe(childfd))
{
printf("create childpipe failed!\n");
exit(1);
}
if(pipe(parentfd))
{
printf("create parentpipe failed!\n");
exit(1);
}
pid = fork();
switch(pid)
{
case -1:
printf("fork error!\n");
exit(1);
case 0:
//子进程
close(childfd[0]);
close(parentfd[1]);
child_rw_pipe(parentfd[0],childfd[1]);
exit(0);
default:
close(childfd[1]);
close(parentfd[0]);
parent_rw_pipe(childfd[0],parentfd[1]);
wait(&stat_val);
exit(0);
}
return 0;
}
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>
#include <string.h>
void child_rw_pipe(int readfd,int writefd)
{
char *message1 = "from child process\n";
write(writefd,message1,strlen(message1)+1);
char message2[100]={'\0'};
read(readfd,message2,100);
printf("child read from pipe :%s\n",message2);
}
void parent_rw_pipe(int readfd,int writefd)
{
char *message1 = "from parent process\n";
write(writefd,message1,strlen(message1)+1);
char message2[100]={'\0'};
read(readfd,message2,100);
printf("parent read from pipe :%s\n",message2);
}
int main(void)
{
int childfd[2],parentfd[2];
pid_t pid;
int stat_val;
if(pipe(childfd))
{
printf("create childpipe failed!\n");
exit(1);
}
if(pipe(parentfd))
{
printf("create parentpipe failed!\n");
exit(1);
}
pid = fork();
switch(pid)
{
case -1:
printf("fork error!\n");
exit(1);
case 0:
//子进程
close(childfd[0]);
close(parentfd[1]);
child_rw_pipe(parentfd[0],childfd[1]);
exit(0);
default:
close(childfd[1]);
close(parentfd[0]);
parent_rw_pipe(childfd[0],parentfd[1]);
wait(&stat_val);
exit(0);
}
return 0;
}
相关文章推荐
- 通过内存映射实现进程间数据交换
- 共享内存实现进程间大数据的交换
- 共享内存实现进程间大数据的交换
- 共享内存实现进程间大数据的交换
- 实现进程间数据交换的两种方法和应用
- [转载]共享内存实现进程间大数据的交换(VC)
- 共享内存实现进程间大数据的交换
- Windows CE下使用共享内存实现进程间数据交换
- linux 内核进程与用户进程的通信 方法一 使用sockopt与内核交换数据
- 共享内存实现进程间大数据的交换
- 共享内存实现进程间大数据的交换
- linux 内核进程与用户进程的通信 方法一 使用sockopt与内核交换数据
- 共享内存实现进程间大数据的交换
- 共享内存实现进程间大数据的交换
- 共享内存实现进程间大数据的交换
- 使用pipe()与fork()函数通过管道实现父子进程之间的通信
- VC 共享内存实现进程间大数据的交换
- Windows CE下使用共享内存实现进程间数据交换
- 共享内存实现进程间大数据的交换
- 共享内存实现进程间数据的交换