2017-04-08 9 views
-2

私はProcessesで新しいです。私は多くを読んだが、実際にどのように動作するのか分かりませんでした。私はchar文字列の各母音のためのプロセスを作ろうとします。私はその文字列からすべての母音を削除する必要があります。私はフォークを使用しなければならないことを知っていますが、私はどのように分かりません。コードを書こうとしましたが、受け取ったのはCore Dumpedでした。母音ごとにプロセスを作成する方法は?

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

char sir[100]; 

int vocal(char x) 
{ 

    if(x=='a' || x=='e' || x=='i' || x=='o' || x=='u' || x=='A'|| 
    x=='E' || x=='I' || x=='O' || x=='U') 
return 1; 
return 0; 

} 
int main(){ 

printf("Read the text: \n"); 
read(1,sir,100); // file descriptor is 1; 
pid_t a_Process; 

for(int i=0;i<strlen(sir);i++) 
{ 

    if(vocal(sir[i])==1) 
    { 
    a_Process=fork(); 
    for(int j=i;j<strlen(sir)-1;i++) 
     sir[j]=sir[j+1]; 
}    

} 
printf("%s",sir); 
    return 0; 
} 

私は子プロセスとすべてがどのようになったのか分かりませんでした。どうもありがとうございました!

+1

CまたはC++?彼らは異なる言語で、異なる答えを持っています。 – aschepler

+0

申し訳ありませんがC、間違いました。 – mary

答えて

0

は、このコードを試してみてください。

#include <sys/wait.h> 
#include <unistd.h> 
#include <stdio.h> 
#include <string.h> 
#include <stdlib.h> 

char sir[100]; 

int vocal(char x) 
{ 
    if (x == 'a' || x == 'e' || x == 'i' || x == 'o' || x == 'u' || 
     x == 'A' || x == 'E' || x == 'I' || x == 'O' || x == 'U') 
     return 1; 
    return 0; 
} 

int main() 
{ 
    int i, j, pid_status; 

    printf("Read the text: \n"); 
    // read(1,sir,100); // file descriptor is 1; 
    fgets(sir, 100, stdin); 

    pid_t a_Process; 

    for (i = 0; i < strlen(sir); i++) 
    { 
     if (vocal(sir[i]) == 1) 
     { 
      printf("detected a vowel\n"); 

      a_Process = fork(); 
      if (a_Process == -1) 
      { 
       fprintf(stderr, "Can't fork a process.\n"); 
       return 1; 
      } 

      if (a_Process) 
      { 
       printf("Starting a new child .... \n"); 
       for (j = i; j < strlen(sir) - 1; j++) 
        sir[j] = sir[j + 1]; 
      } 

      // The following statement is needed such that 
      // child process starts one after the other. 
      if (waitpid(a_Process, &pid_status, 0) == -1) 
      { 
       printf("Error waiting for child process.\n"); 
      } 
     } 
    } 
    printf("%s", sir); 
    return 0; 
} 
関連する問題