Я пытаюсь организовать блокировку передачи между родительским и дочерним процессами, обработанными по классической схеме fork () / pipe (),
но я не могу понять, почему только первый read () в child блокирует, а все последующие чтения - нет, и кроме того, что они возвращают не нулевой результат после read!
например:
parent, сначала напишите имя файла для потомка, затем дождитесь ответа:
for (NSString* file in filenames) {
fprintf(pict_log, "send to conversion file %s\n", filename);
write(g_pfds[1], filename, 512);
memset(filename, ' ', 512);
read(g_pfds[0], filename, 512);
fprintf(pict_log, "completed for file: %s\n", filename);
}
ребенок, тоже самое, но наоборот.
while(!g_break_child)
{
memset(filename, ' ', 512);
int read_bytes = read(g_pfds[0], filename, 512);
// some processing...
write(g_pfds[1], filename, 512);
}
Я должен быть заблокирован на чтение () ребенка после каждой итерации, но почему этого не произошло?