设计一个程序,通过普通管道进行通信,让一个进程发送一个字符串消息给第二个进程,第二个进程收到此消息后,变更字母的大小写,然后再发送给第一个进程。比如,第一个进程发消息:“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 条评论

发表评论

Avatar placeholder

邮箱地址不会被公开。 必填项已用*标注