Piping for input/output

后端 未结 3 665
野趣味
野趣味 2020-12-03 16:13

This question follows from my attempt to implement the instructions in:

Linux Pipes as Input and Output

How to send a simple string between two programs usin

3条回答
  •  情歌与酒
    2020-12-03 16:34

    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    using namespace std;
    int main() {
        int i, status, len;
        char str[10];
        mknod("pipe", S_IFIFO | S_IRUSR | S_IWUSR, 0); //create named pipe
        pid_t pid = fork(); // create new process
        /* Process A */
        if (pid == 0) {
            int myPipe = open("pipe", O_WRONLY); // returns a file descriptor for the pipe
            cout << "\nThis is process A having PID= " << getpid(); //Get pid of process A
            cout << "\nEnter the string: ";
            cin >> str;
            len = strlen(str);
            write(myPipe, str, len); //Process A write to the named pipe
            cout << "Process A sent " << str;
            close(myPipe); //closes the file descriptor fields.
            }
        /* Process B */
            else {
            int myPipe = open("pipe", O_RDONLY); //Open the pipe and returns file descriptor
            char buffer[21];
            int pid_child;
            pid_child = wait(&status); //wait until any one child process terminates
            int length = read(myPipe, buffer, 20); //reads up to size bytes from pipe with descriptor fields, store results
        //  in buffer;
            cout<< "\n\nThis is process B having PID= " << getpid();//Get pid of process B
            buffer[length] = '\0';
            cout << "\nProcess B received " << buffer;
            i = 0;
            //Reverse the string
            for (length = length - 1; length >= 0; length--)
            str[i++] = buffer[length];
            str[i] = '\0';
            cout << "\nRevers of string is " << str;
            close(myPipe);
            }
        unlink("pipe");
    return 0;
    }
    

提交回复
热议问题