网站报错403,网站建设图片教程视频教程,ui界面设计案例ppt,网站建设的申请理由一、使用有名管道完成两个进程的相互通信(提示#xff1a;可以使用多进程或多线程完成)。 代码1#xff1a;创建两个有名管道文件
#includemyhead.hint main(int argc, const char *argv[])
{if(mkfifo(./mingtohua,0664)-1)//创建小明向小华发信息的管…一、使用有名管道完成两个进程的相互通信(提示可以使用多进程或多线程完成)。 代码1创建两个有名管道文件
#includemyhead.hint main(int argc, const char *argv[])
{if(mkfifo(./mingtohua,0664)-1)//创建小明向小华发信息的管道文件“mingtohua”{perror(mkfifo mingtohua error);return -1;}if(mkfifo(./huatoming,0664)-1){perror(mkfifo huatoming error);//创建小华向小明发信息的管道文件“huatoming”return -1;}getchar();//阻塞等待 待聊天结束后删除两个管道文件system(rm mingtohua);system(rm huatoming);return 0;
}代码2 供小明发送、接收的代码
#includemyhead.h
void *send_message(void *arg);//负责发送信息的接口
void *receive_message(void *arg);//负责接收信息的接口int main(int argc, const char *argv[])
{pthread_t tid1,tid2;//创建两个线程if(pthread_create(tid1,NULL,send_message,NULL)!0)//负责发送信息的线程{puts(tid1 create error);return -1;}if(pthread_create(tid2,NULL,receive_message,NULL)!0)//负责接收信息{puts(tid2 create error);return -1;}if(pthread_join(tid1,NULL)0 pthread_join(tid2,NULL)0)//等待回收两个线程{puts(xiaoming closed sendreceive); //成回收输出提示语句}puts(xiaoming off-line);//执行完成 函数结束前输出提示语句return 0;
}
void *send_message(void *arg)//发送信息
{int wfd-1;//打开“mingtohua”管道文件if((wfdopen(./mingtohua,O_WRONLY))-1){perror(open error);return NULL;}char wbuf[128];while(1){printf(请输入);fgets(wbuf,sizeof(wbuf),stdin);//获取终端输入wbuf[strlen(wbuf)-1]0;write(wfd,wbuf,strlen(wbuf));//向管道写入数据if(strcmp(wbuf,quit)0) //输入quit结束break;}close(wfd);//关闭管道文件pthread_exit(NULL);//释放发送信息的线程
}
void *receive_message(void *arg)//接收消息
{int rfd-1;//打开“huatoming”管道文件if((rfdopen(./huatoming,O_RDONLY))-1){perror(open error);return NULL;}char rbuf[128];while(1){bzero(rbuf,sizeof(rbuf));//清空数组read(rfd,rbuf,sizeof(rbuf));//读取管道内数据printf(收到信息:%s\n,rbuf);//终端输出消息if(strcmp(rbuf,quit)0)break;}close(rfd);//关闭文件pthread_exit(NULL);//退出线程
}代码3 供小明发送、接收的代码
#includemyhead.h
void *send_message(void *arg);
void *receive_message(void *arg);int main(int argc, const char *argv[])
{pthread_t tid1,tid2;//创建两个线程if(pthread_create(tid1,NULL,send_message,NULL)!0)//负责发送信息{puts(tid1 create error);return -1;}if(pthread_create(tid2,NULL,receive_message,NULL)!0)//负责接收信息{puts(tid2 create error);return -1;}if(pthread_join(tid1,NULL)0 pthread_join(tid2,NULL)0){puts(xiaohua closed sendreceive);}puts(xiaohua off-line);return 0;
}
void *send_message(void *arg)
{int wfd-1;//打开管道文件if((wfdopen(./huatoming,O_WRONLY))-1){perror(open error);return NULL;}char wbuf[128];while(1){printf(请输入);fgets(wbuf,sizeof(wbuf),stdin);//获取终端输入wbuf[strlen(wbuf)-1]0;write(wfd,wbuf,strlen(wbuf));//向管道写入数据if(strcmp(wbuf,quit)0)break;}close(wfd);pthread_exit(NULL);
}
void *receive_message(void *arg)
{int rfd-1;if((rfdopen(./mingtohua,O_RDONLY))-1){perror(open error);return NULL;}char rbuf[128];while(1){bzero(rbuf,sizeof(rbuf));//清空数组read(rfd,rbuf,sizeof(rbuf));//读取管道内数据printf(收到信息:%s\n,rbuf);if(strcmp(rbuf,quit)0)break;}close(rfd);pthread_exit(NULL);
}
运行图 思维导图