0

fork()を使って2プロセスでファイルの先頭からデータを読み込むサンプルプログラムを試しています。

fork() が呼び出されると、カーネルは子プロセスを作成し、この子プロセスは親プロセスのプロパティを継承します。開いているすべてのファイルとファイル記述子。私の目的は、子供と親の両方が最初からファイルを読み取ることです。dup2() を使用して個別の記述子を作成しようとしましたが、機能しません。

私の 2 番目の質問は、最初のタスクが完了した後、子プロセスが別のタスクの処理を続行できるようにする方法があるかということです。(別のタスクを要求するには、親に信号を送信する必要がありますか?親はパイプまたは fifo を介して子と通信します)

 int main(int argc, char* argv[]){
 int fd1,fd2;
 int fd;
 int read_bytes;
 pid_t pid;
 char* buff;

 buff = malloc(sizeof(buff)*5);
 if(argc < 2){
        perror("\nargc: Forgot ip file");
        return 1;
 }

 fd = open(argv[1],O_RDONLY);
 if(-1 == fd){
        perror("\nfd: ");
        return 2;
 }
 pid = fork();
 if(pid == -1){
        perror("\n pid");
        return 1;
 }
 else if(pid == 0){ // CHILD
        dup2(fd1,fd);
        read_bytes = read(fd1,buff,5);
        printf("\n %s \n",buff);
 }
 else{ //PARENT
        wait();
        printf("\n Parent \n");
        dup2(fd2,fd);
        //close(fd);
        read_bytes = read(fd2,buff,5);
        printf("\n %s \n",buff);
 }
 return 0;
}

理解するのを手伝ってください

4

1 に答える 1