设计一个程序,通过普通管道进行通信,让一个进程发送一个字符串消息给第二个进程,第二个进程收到此消息后,变更字母的大小写,然后再发送给第一个进程。比如,第一个进程发消息:“Hi,There”,第二个进程收到后,将它改变为:“hI,tHERE”之后,再发给第一个进程。需要建立两个普通管道。
鄙人第一次做操作系统的作业,用了一些没有用过的东西,但总体来说思路上没有什么大问题,很清晰。没有许多弯弯绕(没错,说的就是你,算法题)
这次鄙人用的是Linux的系统编译的代码,用的是<unistd.h>头文件
【如果是Windows系统的编译器,要么自行面向CSDN/百度编程,要么下载WSL(就是我死了) 或是下载Linux系统做个虚拟机,具体过程,请继续自行CSDN/百度?,鄙人用的是阿里云上的Centos7系统服务器。】
废话不多说,直接上代码。
#include <sys/types.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <iostream>
#define Write_type 1
#define Read_type 0
using namespace std;
int main(){
int fd1[2],fd2[2];
if (pipe(fd1) == -1 || pipe(fd2) == -1) //创建两个管道
{
fprintf(stderr,"Pipe failed");
return -1;
}
pid_t pid; //创建进程
pid = fork();
if (pid < 0) //创建失败
{
fprintf(stderr, "Fork Failed");
return -1;
}
if (pid > 0)
{
char write_message_1[String_Size];
char read_message_1[String_Size];
char message[String_Size];
cin>>message;
strcpy(write_message_1,message);
close(fd1[Read_type]); //做写端,关闭读端
cout<<"Process1 send the message: "<< write_message_1 << endl;
write(fd1[Write_type], write_message_1, strlen(write_message_1)+1);
close(fd1[Write_type]);
close(fd2[Write_type]); //关闭写端,开始读
read(fd2[Read_type], read_message_1, String_Size);
cout<<"Process1 get the message: "<<read_message_1<<endl;
close(fd2[Read_type]);
}
else {
char write_message_2[String_Size];
char read_message_2[String_Size];
close(fd1[Write_type]);
read(fd1[Read_type], read_message_2, String_Size);
cout<<"Process2 get the message: "<< read_message_2<<endl;
close(fd1[Read_type]);
for(int i = 0; i < strlen(read_message_2); i++) //大小写转换
{
if(read_message_2[i]>='a' && read_message_2[i]<='z')
read_message_2[i] = read_message_2[i]-32;
else if(read_message_2[i]>='A' && read_message_2[i]<='Z')
read_message_2[i] = read_message_2[i]+32;
}
strcpy(write_message_2,read_message_2);
close(fd2[Read_type]);
cout<<"Process2 send the message: "<< write_message_2<<endl;
write(fd2[Write_type], write_message_2, strlen(write_message_2)+1);
close(fd2[Write_type]);
}
return 0;
}
运行结果如下:
(图片有点糊,呃。。。。。大概是这么一个意思就行?)
欢迎白piao
0 条评论