使用read()读取null终止符

时间:2011-03-25 17:50:06

标签: c++ c unix

是否有一个选项,read()的一部分,当在文件描述符上调用read()时,它只输出字符到空终止符?

4 个答案:

答案 0 :(得分:7)

对不起,不,没有。 read()根本不查看数据;它只读取尽可能多的字节数(但不超过缓冲区大小)。

我会使用更高级stdio.h函数,通过调用getc()(并写入缓冲区)直到我看到NUL字节,然后在NUL上ungetc()来执行此操作

答案 1 :(得分:3)

如果你的意思是读取空终结符而不是打印,那么no:它只读取你指示的字节数,除非列出的其中一个失败条件联机帮助页出现,或者到达文件结尾。 (文本文件中没有NUL终结符,但我认为你知道这一点。)

答案 2 :(得分:3)

不使用缓冲的stdio或您自己的缓冲系统,读取特定分隔符或除固定字节数以外的任何条件的唯一方法是一次读取一个字节。如果在strace下运行shell脚本,您会注意到shell read命令以这种方式工作,因为它必须保留后续输入未读,以便其他继承fd的进程可以读取它。

答案 3 :(得分:0)

有一种情况,read()将为您执行行处理,这是在终端(pty / tty)上打开文件描述符的情况。您可以通过操作termio结构来设置行分隔符。我不知道你是否可以将NUL设置为你的行尾字符。