У меня есть именованный канал в моей программе на C ++. Дочерний процесс записывает в него значение, а родительский процесс читает его. Я создал канал с помощью mkfifo, и все операции блокируются (fifo не может быть открыт для чтения, пока его не попытались открыть для записи и v.v.
к сожалению, иногда мой дочерний процесс не останавливается из-за ошибки в программе, которую запускает дочерний процесс. Я не ставлю задачу исправить эту ошибку в этой внешней программе, но я хочу убедиться, что родительский процесс не останавливается на бесконечное время при заблокированном вызове open fifo, а продолжается через некоторое время (без чтения значения в канале ).
Так что мне нужно что-то вроде функции WaitNamedPipe. Эта функция ожидает, пока не истечет интервал времени ожидания или не будет доступен экземпляр указанного именованного канала. http://ist.marshall.edu/ist480acp/namedpipes.html#WaitNamedPipe
Другой способ реализовать это, конечно, тоже работает. Я попытался сделать это с помощью цикла в родительском процессе, в котором он всегда пытается открыть канал для чтения, а затем спит, если открытие невозможно.
Это, кажется, не имеет никакого эффекта, вероятно, потому что родительский процесс блокируется при первом открытом вызове.
Спасибо за любую помощь.