Читайте до нулевого терминатора, используя read () - PullRequest
2 голосов
/ 25 марта 2011

Есть ли опция, часть read (), которая при вызове read () для файлового дескриптора выводит только символы до нулевого терминатора?

Ответы [ 4 ]

7 голосов
/ 25 марта 2011

Извините, нет, нет.read() вообще не смотрит на данные;он просто читает столько байтов, сколько есть (но не больше размера буфера).

Я бы сделал это с функциями stdio.h более высокого уровня, вызвав getc() (и записав в буфер).) пока я не увидел байт NUL, а затем ungetc() в NUL.

3 голосов
/ 25 марта 2011

Без использования буферизованного stdio или вашей собственной системы буферизации, единственный способ считывания до определенного символа-разделителя или любого условия, отличного от фиксированного числа байтов, - это чтение по байтам за раз.Если вы запустите сценарии оболочки под strace, вы заметите, что команда shell read работает таким образом, потому что она должна оставить последующий ввод непрочитанным, чтобы его могли прочитать другие процессы, которые наследуют fd.

3 голосов
/ 25 марта 2011

Если вы имеете в виду читает до нулевого терминатора вместо печатает , то нет: он просто читает количество байтов, которые вы указываете, если только одно из условий сбоя, перечисленных на странице руководства происходит, или он достигает конца файла. (В текстовых файлах нет NUL-терминаторов, но я полагаю, вы это знали.)

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

В одном случае read () выполнит для вас обработку строки, и это когда ваш файловый дескриптор открывается на терминале (pty / tty).Вы можете установить, каков ваш разделитель строк, манипулируя структурой termio.Я не знаю, можете ли вы установить NUL в качестве символа конца строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...