#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <errno.h>
#define MAXLINE 80
void *parent_read_proc(void *p)
{
int p_fd_r = (int)p;
char line[MAXLINE] = {0};
int len = 0;
int n = 0;
while(1)
{
memset(line,0,MAXLINE);
len = read(p_fd_r,line,MAXLINE);
printf("\nparent read:%s %d\t\n",line,n);
n++;
}
return 0;
}
void *child_read_proc(void *p)
{
int c_fd_r = (int)p;
char line[MAXLINE] = {0};
int len = 0;
int n = 0;
while(1)
{
memset(line,0,MAXLINE);
len = read(c_fd_r,line,MAXLINE);
printf("\nchild read:%s %d\t\n",line,n);
n++;
}
return 0;
}
void *parent_write_proc(void *p)
{
int p_fd_w = (int)p;
char line[MAXLINE] = {0};
int len = 0;
int n = 0;
char msg[] = "this is parent";
while (n < 10) {
len = strlen(msg);
int err = write(p_fd_w,msg,len);
if (err != -1) {
printf("\nparent write : %s %d",msg,n);
}
n++;
sleep(2);
}
return 0;
}
void *child_write_proc(void *p)
{
int c_fd_w = (int)p;
char line[MAXLINE] = {0};
int len = 0;
int n = 0;
char msg[] = "this is child";
while (n < 10) {
len = strlen(msg);
int err = write(c_fd_w,msg,len);
if (err != -1) {
printf("\nchild write : %s %d",msg,n);
}
n++;
sleep(2);
}
}
int main(void)
{
int fd_rw[2];
int fd_wr[2];
pid_t pid;
pthread_t p_r_pid;/*parent read thread*/
pthread_t c_r_pid;/*child read thread*/
pthread_t p_w_pid;/*parent write thread*/
pthread_t c_w_pid;/*child write thread*/
if (pipe(fd_rw) < 0) {
printf("create pipe_rw fail!\n");
return -1;
}
if (pipe(fd_wr) < 0) {
printf("create pipe_wr fail!\n");
}
pid = fork();
if (pid < 0){
printf("fork process fail! errno = %d\n",errno);
return -1;
}
else if (pid == 0) {
int err = pthread_create(&c_r_pid,NULL,child_read_proc,(void*)fd_rw[0]);
if (err != 0){
printf("create child read proc fail, errno = %d\n",err);
return -1;
}
err = pthread_create(&c_w_pid,NULL,child_write_proc,(void*)fd_wr[1]);
if (err != 0) {
printf("create child write proc fail, errno = %d\n",err);
return -1;
}
pthread_join(c_r_pid);
pthread_join(c_w_pid);
}
else {
int err = pthread_create(&p_r_pid, NULL, parent_read_proc,(void*)fd_wr[0]);
if (err != 0){
printf("create parent read proc fail, errno = %d\n",err);
return -1;
}
err = pthread_create(&p_w_pid, NULL, parent_write_proc,(void*)fd_rw[1]);
if (err != 0) {
printf("create parent write proc fail, errno = %d\n",err);
return -1;
}
pthread_join(p_r_pid);
pthread_join(p_w_pid);
}
int n = 0;
scanf("%d",&n);
return 0;
}
进程通信pipe, 输入输出,进程间互相读写
最新推荐文章于 2022-07-29 17:39:55 发布