我有这个任务,我必须在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;
}
答案 0 :(得分:2)
当您fork()
时,string
变量出现在父进程和子进程中。您只是在其中一个过程中制作toupper()
。你缺少的是父母和孩子之间没有沟通。父级假设将char传递给子级,然后子级应将其设为toupper()
。如上所述,实现此沟通的一种方法是pipe
。