0
親プロセスでユーザー入力番号「n」を取得し、それを子プロセスに渡す必要があります。子プロセスは「n」ユーザー入力値とストア配列内のすべての値を合計し、それを出力する子プロセスに戻します。私はこのコードを何回と何のダースをチェックした私のプロセスは子プロセスに行きません
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<sys/types.h>
#include<pthread.h>
#include<fcntl.h>
void *sum(void *a)
{printf("in thread");
int * arr=(int *)a;
int i;
int sum=0;
int size=sizeof(arr)/sizeof(arr[0]);
for(i=0;i<size;i++)
{
sum=sum +arr[i];
}
pthread_exit(sum);
}
int main()
{
int pipefd[2];
pid_t childpid;
pthread_t tid;
pipe(pipefd);
int r;
int n;
childpid=fork();
if (0==childpid)
{
printf("in child process");
close(pipefd[1]);
read(pipefd[0],r,sizeof(int));
close(pipefd[0]);
int *ret;
int a[r];
int i;
for (i = 0; i <r; i++)
{ printf("enter values: ");
scanf("%d",&a[i]);
}
pthread_create(&tid,NULL,sum,(void *)a);
pthread_join(tid,(void *)&ret);
printf("%d",*ret);
}
else
{ printf("in parent process");
printf("enter a number");
scanf("%d",&n);
close(pipefd[0]);
write(pipefd[1],n,sizeof(int));
close(pipefd[1]);
}
return 0;
}
はwrong.Theプロセスがn'.The子プロセスが実行されることはありません」の値を取った後に停止するようです。
これで、子プロセスのscanf()は動作しません。'enter values 'はn回出現しますが、これらの値を入力する場所はありません。fprintfをスレッド関数に入れてありがとう、今スレッドはatleastです – Ali
これをチェックしてください:http://stackoverflow.com/questions/26687602/stdin-stdout-and-stderr-are-shared-between – Hod
答えは、彼は子プロセスで標準を取ったことはないと言います。子プロセスでユーザー入力をする必要があります。 – Ali