fork を使用して子プロセスを作成する必要があり、親プロセスが子プロセスに別の C プログラム「read.c」(.txt ファイルからすべての整数を読み取り、平均を計算する) を実行するように指示するプロジェクトを行っています。 execve を使用して、パイプを介してその平均値を親プロセスに送信する必要があります。「process.c」プログラムの子プロセスで、「read.c」プログラムの結果の「平均値」を取得する方法がわかりません。一部の友人は、パイプ(pfd[2])に役立つファイル記述子をexecveに渡し、他のプログラム(read.c)からパイプを使用してデータをprocess.cプログラムに書き込む必要があると言いました。しかし、私はそれを行う方法がわからないので、正しく機能していません。process.c と read.c の両方のコードを投稿していますが、うまく機能させるにはどの変更を加える必要があるか教えてください。
process.c
#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
main()
{
int pid;
int pfd[2];
int i;
char string1[12];
snprintf(string1,12,"%i",pfd[1]);
char *args[] = {"read",&string1[0],NULL};
pipe(pfd);
pid = fork();
if(pid == 0)
{
execve("read",args,NULL);
int size = 100;
char buf[size];
close(pfd[1]);
read(pfd[0],buf,size);
printf("%s\n",buf);
}
}
read.c
#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
int main (int argc,char *argv[],char *envp[])
{
int pfd[2];
pfd[1]= atoi(argv[1]);
close(pfd[0]);
FILE *ptr_file;
char buf[1000];
int sum = 0;
int avg =0;
int no = 0;
int count = 0;
ptr_file =fopen("data.txt","r");
if (!ptr_file)
return 1;
while (fgets(buf,1000, ptr_file)!=NULL)
{
printf(" %s \n",buf);
no = atoi(buf);
sum = sum + no;
printf("Sum = %d \n", sum);
count++;
}
fclose(ptr_file);
avg = sum/count;
printf("Average : %d \n",avg);
write(pfd[1],"hello",6);/*i just write here hello to see that it is working or not*/
return 0;
}
read.c ファイルから process.c の子プロセスに出力を取得する解決策があれば教えてください。