Я использую FIFO для обмена двумя процессами.
читайте fifo: почему он блокирует, а затем не блокирует
//client:
const char * msg = "Hello, I'm cleint1.";
const char * fifoName = "../server/fifo.tmp";
int fd = open(fifoName, O_WRONLY);
write(fd, msg, strlen(msg) + 1);
close(fd);
//server:
char msg[100];
const char * fifoName = "fifo.tmp";
mkfifo(fifoName, 0666);
int fd = open(fifoName, O_RDONLY);
while(read(fd, msg, 100) > 0)
{
std::cout<<"msg received: "<<msg<<std::endl;
}
close(fd);
unlink(fifoName);
Сервер первый блок там ждать некоторых сообщений в fifoName
. Когда некоторые сообщения идут (клиент выполняется), сервер читает их, а затем цикл завершается.
Теперь я смущен. Потому что я не могу понять, почему в первый раз, когда сервер вызывает read
, и он блокирует его тогда, когда он снова вызывает read
, и он больше не блокируется.
Я печатаю возвращаемое значение read
, и я получаю 0 после получения первого сообщения.
Что мне нужно, чтобы каждый раз блокировать read
, чтобы сервер мог получать любое сообщение, как только какой-либо клиент отправляет сообщения.
Вы должны распечатать strerror (errno), чтобы узнать, что такое ошибка. –
@SumitGemini, я печатаю возврат 'read', и я получаю 0. – Yves
, так что вы хотите, чтобы ваш сервер работал бесконечно? читать непрерывно? –