Вопрос

У меня есть дескриптор файлов, который открыт для чтения, который может быть не блокировкой. Что мне нужно сделать, это просто прочитать все данные до достижения EOF и напишите эти данные на запись файлового дескрипта. Как процесс, который выполняет это копирование, не «осознает» все, что происходит вокруг него, я не думаю, что я могу сделать что-то полезное во время ожидания данных, и я не хочу использовать while петля (пока errno не является EAGAIN) Потому что я думаю, что это будет расточительным. Есть ли способ заблокировать или иным образом приостановить выполнение процесса копирования, пока данные не будут доступны?

Это было полезно?

Решение

Ваш другой ответ просто unsets O_NONBLOCK, что устанавливает файл обратно в блокировку. Это совершенно нормально, если это работает в вашей ситуации; Но если нет, вы можете использовать select() Чтобы заблокировать, пока ваш неблокирующий файл дескриптор не будет читабелее.

Другие советы

Глава 7 7 Generic (SG) Linux SCSI пример Как сделать это:

int flags = fcntl(fd, F_GETFL);
fcntl(fd, F_SETFL, flags & (~O_NONBLOCK));
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top