#macos #posix #blocking
#macos #posix #блокировка
Вопрос:
Я пытаюсь организовать передачу блокировки между родительским и дочерним элементами, обрабатываемыми с использованием классической схемы fork() / pipe() , но я не могу понять, почему блокируется только первое чтение () в дочернем элементе, а все последующие чтения — нет, и, кроме того, они возвращают не нулевой результат после чтения!
например:
родитель, сначала запишите имя файла дочернему, чем ждать ответа:
for (NSString* file in filenames) {
fprintf(pict_log, "send to conversion file %sn", filename);
write(g_pfds[1], filename, 512);
memset(filename, ' ', 512);
read(g_pfds[0], filename, 512);
fprintf(pict_log, "completed for file: %sn", 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);
}
Я должен быть заблокирован при чтении дочернего элемента () после каждой итерации, но почему этого не происходит?
Ответ №1:
Теперь я мог бы ответить себе, проблема в том, что в моем случае мне нужна двунаправленная передача, но когда мы открываем пару дескрипторов через функцию pipe() , мы, таким образом, создаем однонаправленный канал, в случае двунаправленной передачи нам нужно дважды вызвать pipe(), чтобы создать два однонаправленных канала!