C中的并发程序(并发或顺序?)

时间:2015-01-31 01:40:26

标签: c concurrency system-calls

这段代码会被视为并发还是顺序?我认为它是并发的,因为有一个for循环并且它创建进程,并且每个进程都有一个子,父等等......所以它们都是并行运行的。这是对的吗?

代码:

int main(int argc, char *argv[])
{
    // ATTRIBUTES //
    int freq[argc-1], ipc[argc][2], nbytes, i;// freq of words, pipes, counters
    ssize_t errorfi;
    char  readbuffer[9999];
    char** k = malloc(50);
    char** op = malloc(50);


    if(argc == ONE) { // there are no files given, throw error and close
      fprintf(stderr, "There are no files found from %s\n", argv[0]);
      exit(0);
    }

    for(i = 1; i < argc; i++) // creates pipes for ipc
       pipe(ipc[i]);

    for(i = 1; i < argc; i++) { // reads input after position 0(a.out)

        pid_t pid = fork(); // creates process

        if( pid < 0 ) {       // bad fork process: error
          perror("bad fork");
          exit(0);
        }
        else if(pid > 0) {   //parent process

          close(ipc[i][1]);
          wait(NULL);
          nbytes = read(ipc[i][0], readbuffer, sizeof(readbuffer));

          if(nbytes > 0)
          printf("%s\n", readbuffer);
        }
        else if(pid == 0) {  // child process

           close(ipc[i][0]);

           k = inputReader(argv[i]); // finds filename,w1,w2,w3,uniqueWords

           char info[50];

           strcat(info, k[0]);
           strcat(info, " ");
           strcat(info, k[1]);
           strcat(info, " ");
           strcat(info, k[2]);
           strcat(info, " ");
           strcat(info, k[3]);
           strcat(info, " ");
           strcat(info, k[4]);

           int uniqueWordint = atoi(k[4]);
           freq[i-1] = uniqueWordint; // freq of all uniqueWords

           errorfi = write(ipc[i][1], info, strlen(info)+1); // writes info to pipe i

           if (errorfi < 0 ) {

              fprintf(stderr, "error found when writing in pipe errofi: %d\n", errorfi);
              exit(0);
           }

      exit(0); // close process
     }// closes child process
   } // closes for-loop for each process
     return(0); // close main 
 } // closes main

0 个答案:

没有答案