使用fork在两个进程之间通过char发送字符串char

时间:2014-03-29 14:08:01

标签: c++ c linux fork

我有这个任务,我必须在C / C ++ for linux上创建一个程序,在那里它通过char从一个进程向另一个进程发送一个字符串char,当第二个进程收到它们大写它们的字符时。

这是我写的代码,如果有人可以告诉我共享过程是否正确完成还是我遗漏了某些内容。

#include <iostream.h>
#include <stdio.h>
#include <string.h>

int main(int argc, char *argv[]) {
    int childpid;
    char *string = "Hello";
    char *letter;

    childpid = fork();

    if(childpid == 0) {
        for (int i = 0; i<string.length; i++) {
            letter = string[i];
            printf(letter);
        }
    } else {
        read(letter);
        printf(letter.toupper());
    }

    return 0;
}

代码更新:

#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <unistd.h>

int main(int argc, char *argv[]) {
    pid_t pid;
    int mypipe[2];
    int ret;
    char *string = "Hello";
    char *buf[20];
    int bytesread;

    ret = pipe(mypipe);

    if(ret == -1) {
        perro("Pipe failed");
        exit(1);
    }

    pid = fork();

    if(pid == 0) {
        for(var i = 0; i<string.length; i++) {
            write(mypipe[1],string[i],1);
        }
    } else {
        while( (bytesread = read(mypipe[0],buf,15)) > 0) 
        {
            buf[bytesread] = '\0';
            printf("buf: %s\n", buf.toupper()); 
        }
    }

    return 0;
}

1 个答案:

答案 0 :(得分:2)

当您fork()时,string变量出现在父进程和子进程中。您只是在其中一个过程中制作toupper()。你缺少的是父母和孩子之间没有沟通。父级假设将char传递给子级,然后子级应将其设为toupper()。如上所述,实现此沟通的一种方法是pipe