Я пытаюсь установить связь между двумя процессами, пытаясь прочитать данные из текстового файла в первый канал и прочитать его на другом канале, но функция записи всегда дает сбой:
Main:
int main(int argc, char* argv[])
{
int readerPip[2], writerPip[2], reader, writer;
if (pipe(readerPip))
{
fprintf (stderr, "Pipe failed.\n");
return EXIT_FAILURE;
}
if(pipe(writerPip))
{
fprintf (stderr, "Pipe failed.\n");
return EXIT_FAILURE;
}
close(readerPip[1]); // closing reader writing side pipe for main thread
reader = fork();
if (reader < 0)
{
perror("Cannot fork()");
exit(EXIT_FAILURE);
}
else if (reader == 0)
{
do_reader(readerPip);
}
wait(NULL);
close(writerPip[0]); // closing writer reader side pipe for main thread
do_father(readerPip, writerPip);
close(readerPip[0]); // closing reader reader side pipe for main thread
close(writerPip[1]); // closing writer writing side pipe for main thread
writer = fork();
if (writer < 0)
{
perror("Cannot fork()");
exit(EXIT_FAILURE);
}
else if (writer == 0)
{
do_writer(writerPip);
}
return 1;
}// main
do_Reader:
void do_reader(int readerPipe[])
{
char stringCommand[17];
long long unsigned command;
close(readerPipe[0]);
while (1)
{
scanf("%s", stringCommand);
command = convertStringToPolygon(stringCommand);
if ((command & 0xFFFFFFFF) == 0xFFFFFFFF)
{
break;
}
if (write(readerPipe[1], stringCommand, strlen(stringCommand) ) == -1)
{
printf("writing falied");
}
else
{
printf("success");
}
printf("\n");
}
close(readerPipe[1]);
exit(0);
}
do_father
void do_father(int readerPipe[], int writerPipe[])
{
long long unsigned nbytes;
char currentPolygon[17];
currentPolygon[16] = '\0';
while (1)
{
nbytes = read(readerPipe[0], currentPolygon, sizeof(currentPolygon));
if (nbytes == 0)
{
printf("done");
break;
}
manageProgram(readerPipe, writerPipe, convertStringToCommand(currentPolygon));
}
}
do_writer
void do_writer(int pip[])
{
close(pip[1]);
long long unsigned command, nbytes;
while (1)
{
nbytes = read(pip[0], &command, sizeof(command));
if (nbytes == 0)
{
break;
}
if ((((command & THIRD_BIT_MASK) != FALSE) || ((command & FORTH_BIT_MASK)
!= FALSE) ||
((command & FIFTH_BIT_MASK) != FALSE)) != FALSE)
generateOutputDependsOnBits(command);
}
close(pip[0]);
exit(0);
}
остальная часть кода не имеет значения, так как запись для канала чтения не работает.текстовый файл выглядит следующим образом:
3a 0000050000050505 3e 003cc40000c43c3c ba 000088ec9c32ce32 f8 cc 3a 000085ec9a32cd32 4c 8c 5c ac fd FFFFFFFFFFFFFFFF