パイプに対するユーザーの読み取り/書き込み権限があります。グループは読んだ。他は読んだ。しかし、プログラムを実行すると、プログラムが「固まった」状態になります。プログラム1は「親」です。プログラム2は「子供」です。名前付きパイプはCプログラムで開けません
プログラム1:
int main(int argc, char * argv[])
{
FILE *fptr; //for opening and closing input file
int fdw;// write to pipe;
int fdr; //read to pipe;
pid_t pid;
int inputarray[500];
int arraylength = 0; int j =0;
char *mypipe = "mypipe";
if (argc < 2)
{
printf("Need to provide the file's name. \n");
return EXIT_FAILURE;
}
//open input file
fptr = fopen(argv[1], "r");
if (fptr==NULL)
{
printf("fopen fail.\n");
return EXIT_FAILURE;
}
//read input file and fill array with integers
while (!feof(fptr))
{
fscanf(fptr,"%d",&inputarray[arraylength]);
arraylength = arraylength + 1;
}
fclose(fptr); //close input file
pid = fork();
mkfifo(mypipe, 0666);
fdw = open("mypipe",O_WRONLY);
if (fdw < 0)
{
perror("File can't open to write.");
return;
}
int b;
b=3;
write(fdw,&b,sizeof(b));
close(fdw);
if (pid ==-1)
{
perror("fork");
exit(1);
}
int status; //exit status of child
if(pid==0)//if child process
{
execl("program2", (char*) NULL);
}
else //if parent process
{
wait(&status);}
if((WIFEXITED(status)))
{
printf("Child's exit code %d", WEXITSTATUS(status));
}
else{
printf("Child did not terminate with exit");}
}
プログラム2:プログラムは読まれて書いているものまで、FIFOへの書き込みをブロックします
int fdl;
int data;
fdl = open("mypipe",O_RDONLY);
if (fdl < 0)
{
perror("File can't open to read.");
return;
}
read(fdl,&data,sizeof(data));
close(fdl);
いつになってしまうのですか? – thrig
プログラム1が停止します。それは親です。プログラム2は子供です。 – Alex
あなたはこれをすべて1つのプログラムで行うことができることを知っていましたか?プログラム1のexecはprogram2の内容に置き換えることができます。 –