2014-03-29 85 views
0

我有這個任務,我必須在C/C++上爲linux創建一個程序,在這裏它通過char從一個進程向另一個進程發送字符串char,並且當第二個進程接收到大寫的字符。使用fork在兩個進程之間發送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; 
} 
+3

您可能想了解['pipe'](http://man7.org/linux/man-pages/man2/pipe.2.html)和['dup2'](http:// man7。組織/ LINUX /人-頁/男2/dup.2.html)。 –

+0

你可能想看看unix管道。在終端輸入'man 2 pipe'。 – juanchopanza

+1

C或C++?選一個。 –

回答

2

當你fork()string變量存在於父以及子進程。您只需在其中一個過程中製作toupper()即可。你缺少的是父母和孩子之間沒有溝通。家長設想將字符傳遞給孩子,然後孩子應該使它成爲toupper()。正如所建議的,通過pipe來實現這種溝通的一種方式。

+0

你可以檢查我的更新,並告訴我,如果我做得對。 – user2374907

+0

看起來不錯。你的'read'需要循環。請參閱[樣本](http://www.tldp.org/LDP/lpg/node11.html)。注意避免了'read'和'write'中第三個參數的硬編碼。另外我猜你正在編寫C程序(而不是C++程序)。所以刪除iostream包含。 – rockoder

相關問題