- 姓名 胡家揆
- 学号 201821121023
- 班级 计算1811
1. 编写程序
在服务器上用Vim编写程序:创建一个命名管道,创建两个进程分别对管道进行读fifo_read.c
和写fifo_write.c
。给出源代码。
fifo_read.c
#include<unistd.h> #include<errno.h> #include<stdio.h> #include<stdlib.h> #include<sys/stat.h> #include<sys/types.h> #include<fcntl.h> int main() { //创建管道 int fif=mkfifo("fifo",0777); if(fif<0){ printf("Failed to create fifo!\n"); return -1; } int fr=open("fifo",O_RDONLY);//读取端只读选项 if(fr<0){ printf("Failed to open fifo!\n"); return -1; } else{ printf("connect right!\n"); while(1){ char buff[500]={0}; int size=read(fr,buff,500); if(size>0){ printf("read content is:%s\n",buff);//显示接受内容 } } } close(fr); return 0; }
fifo_write.c
#include<unistd.h> #include<errno.h> #include<stdio.h> #include<stdlib.h> #include<sys/stat.h> #include<sys/types.h> #include<fcntl.h> int main() { int fw=open("fifo",O_WRONLY);//写入端,只写 if(fw<0){ printf("Failed to open fifo!\n"); return -1; } else{ printf("Start writing!\n"); while(1){ printf("write:"); char buff[500]; scanf("%s",buff); int size=write(fw,buff,500); if(size<0){ printf("Error!\n"); } else{ printf("write content is:%s\n",buff);//显示输入内容 } } } close(fw); return 0; }
2. 分析运行结果
给出运行结果,并分析。
分析(左边读取,右边输入):
1.创建管道--先运行read.c等待write的连接,实现创建管道的代码在read.c的开头。
2.接着打开另一个客户端,运行write.c后分别出现connect right和Start writing!表示管道连通,可以实现读写。
3.想要中断程序运行ctrl+c,后再次运行要删除之前生成的fifo文件。
3. 通过该实验产生新的疑问及解答
通过该实验如果有产生新的疑问,可以写出来,并尝试自己解决问题。
通过psftp向服务器传输文件后有文字乱码,然而通过vim修改文件,保存文件时,提示“readonly option is set”如何解决?
通过wq!强制保存修改。