wordpress 付费文章,厦门seo收费,wordpress 显示简介,福州高端网站建设公司一、相关练习
1.使用有名管道实现#xff0c;一个进程用于给另一个进程发消息#xff0c;另一个进程收到消息后#xff0c;展示到终端上#xff0c;并且将消息保存到文件上一份
1.1 01homework.c
#include myhead.hint main(int argc, const char *argv[])
…一、相关练习
1.使用有名管道实现一个进程用于给另一个进程发消息另一个进程收到消息后展示到终端上并且将消息保存到文件上一份
1.1 01homework.c
#include myhead.hint main(int argc, const char *argv[])
{//创建一个有名管道if(mkfifo(./pipe, 0664) -1){perror(mkfifo error);return -1;}//定义通信容器char buf[128] ;//创建父子进程pid_t pid fork();if(pid 0){perror(fork error);return -1;}else if(pid 0){//子进程//以读的形式打开文件int rfd open(./pipe, O_RDONLY);if(rfd -1){perror(open error);return -1;}//已追加形式打开要写入文件int dfd open(./test.txt, O_WRONLY|O_APPEND|O_CREAT, 0664);if(dfd -1){perror(open dfd error);return -1;}printf(管道文件读端打开\n);while(1){bzero(buf, sizeof(buf));//读取数据read(rfd, buf, sizeof(buf));if(strcmp(buf, quit) 0){break;}printf(收到消息为%s\n, buf);//将读取到的数据写入目标文件write(dfd, buf, strlen(buf));write(dfd, \n, sizeof(\n));}//关闭文件close(rfd);close(dfd);//退出进程exit(EXIT_SUCCESS);}//以写的形式打开管道文件int wfd open(./pipe, O_WRONLY);if(wfd -1){perror(open wfd error);return -1;}printf(管道文件写端打开\n);usleep(10);while(1){usleep(10);bzero(buf, sizeof(buf));printf(请输入);fgets(buf, sizeof(buf), stdin);buf[strlen(buf)-1] 0;//写入数据write(wfd, buf, strlen(buf));//终止判断if(strcmp(buf, quit) 0){break;}}//回收进程资源wait(NULL);//关闭写端close(wfd);//删除管道文件system(rm pipe);return 0;
}1.2 程序运行效果 2.使用有名管道实现两个进程间相互通信 2.1 creat.c
#include myhead.hint main(int argc, const char *argv[])
{//创建管道文件if(mkfifo(./pipe1, 0664) -1){perror(mkfifo pipe1 error);return -1;}if(mkfifo(./pipe2, 0664) -1){perror(mkfifo pipe2 error);}getchar();//删除管道文件system(rm pipe1);system(rm pipe2);return 0;
}2.2 fork_a.c
#include myhead.hint main(int argc, const char *argv[])
{//创建通信中间变量char buf[128] ;//创建父子进程pid_t pid fork();if(pid 0){perror(fork error);return -1;}else if(pid 0){//子进程//以只读的形式打开管道文件2int rfd open(./pipe2, O_RDONLY);if(rfd -1){perror(pipe2 open error);return -1;}//读取管道文件2中的数据while (1){bzero(buf, sizeof(buf));read(rfd, buf, sizeof(buf));if(strcmp(buf, quit) 0){//退出聊天printf(B已经退出聊天请输入“quit”退出聊天\n);break;}printf(收到B的消息%s\n, buf);}//关闭文件描述符close(rfd);//退出子进程exit(EXIT_SUCCESS);}//以只写的形式打开管道文件1int wfd open(./pipe1, O_WRONLY);if(wfd -1){perror(pipe1 open error);return -1;}//向管道文件1中写入数据while(1){bzero(buf, sizeof(buf)); //清空容器printf(向B发送消息);fgets(buf, sizeof(buf), stdin); //从标准输入中读取数据putchar(10);buf[strlen(buf)-1] 0; //去掉换行符write(wfd, buf, strlen(buf)); //向管道文件1中写入数据if(strcmp(buf, quit) 0) //如果输入的是quit则退出聊天{break;}}//回收子进程wait(NULL);//关闭文件描述符close(wfd);return 0;
}2.3 fork_b.c
#include myhead.hint main(int argc, const char *argv[])
{//创建通信中间变量char buf[128] ;//创建父子进程pid_t pid fork();if(pid 0){perror(fork error);return -1;}else if(pid 0){//子进程//以只读的形式打开管道文件2int rfd open(./pipe1, O_RDONLY);if(rfd -1){perror(pipe2 open error);return -1;}//读取管道文件2中的数据while (1){bzero(buf, sizeof(buf));read(rfd, buf, sizeof(buf));if(strcmp(buf, quit) 0){//退出聊天printf(A已经退出聊天请输入“quit”退出聊天\n);break;}printf(收到A的消息%s\n, buf);}//关闭文件描述符close(rfd);//退出子进程exit(EXIT_SUCCESS);}//以只写的形式打开管道文件1int wfd open(./pipe2, O_WRONLY);if(wfd -1){perror(pipe1 open error);return -1;}//向管道文件1中写入数据while(1){bzero(buf, sizeof(buf)); //清空容器printf(向A发送消息);fgets(buf, sizeof(buf), stdin); //从标准输入中读取数据putchar(10);buf[strlen(buf)-1] 0; //去掉换行符write(wfd, buf, strlen(buf)); //向管道文件1中写入数据if(strcmp(buf, quit) 0) //如果输入的是quit则退出聊天{break;}}//回收子进程wait(NULL);//关闭文件描述符close(wfd);return 0;
}2.4 程序运行效果 二、思维导图