Как остановить переполнение файловых дескрипторов в C - PullRequest
0 голосов
/ 04 марта 2011

Я пишу сообщение в дескриптор файла размером 88 КБ.Файловый дескриптор в моей системе Linux может содержать только 64 КБ.Как только данные помещаются в файловый дескриптор, они считываются и передаются по TCP-соединению.

Как узнать, могу ли я записать больше данных в дескриптор файла, то есть дескриптор файла пуст?Мне нужна функция, которая блокирует, пока дескриптор файла не станет пустым или, по крайней мере, не сможет вернуть значение, давая мне знать, как данные я могу безопасно записать в дескриптор файла.

Ответы [ 2 ]

1 голос
/ 04 марта 2011

Я думаю select () , вероятно, то, что вы хотите.Имея правильные аргументы, вы можете организовать его блокировку до тех пор, пока ваш файловый дескриптор не будет готов к вашим операциям ввода-вывода.

Однако ваш вопрос сформулирован немного странно, поскольку мы обычно не обращаемся к файлудескрипторы, имеющие емкость или «пустые».Похоже, вы говорите о файловом дескрипторе, который представляет одну конечную точку канала, и это канал (не дескриптор файла), который имеет емкость 64 КБ.

0 голосов
/ 04 марта 2011

Мне кажется, что ОП пытается отправить дейтаграмму (AF_UNIX или AF_INET / UDP) больше, чем настроенный максимальный размер пакета.Другие возможности - это каналы и FIFO, которые имеют максимальные атомарные размеры записи;исправление здесь заключается в выполнении нескольких записей, и последовательные записи будут блокироваться до тех пор, пока для них не будет места в канале / FIFO.

...