C - 读取()添加'\ 0'?

use*_*234 -1 c unix io posix unbuffered

它有吗?我总是对这种东西模糊不清,但如果我有类似的东西:

char buf[256];
read(fd, buf, 256);

write(fd2, buf, 256);
Run Code Online (Sandbox Code Playgroud)

除了这些函数返回-1的情况之外,这里是否存在错误的可能性?

如果它只读40个字符,它会在它之后放一个\ 0吗?(并且会写出识别\ 0并停止?另外,如果要读取256个字符,那么256之后是否有\ 0?

Ric*_*ard 7

没有.

考虑读取二进制数据(例如,文件中的照片):添加额外的字节会破坏数据.


alk*_*alk 7

read()添加'\ 0'?

不,它没有.它只是读.

来自read()的文件:

read()函数应尝试从与open文件描述符相关联的文件中读取nbyte字节,fildes到buf指向的缓冲区.


除了这些函数返回-1的情况之外,这里是否存在错误的可能性?

read()可能会返回0指示文件结尾.

如果读取(也来自套接字描述符)read()不一定要读取尽可能多的字节数.因此,在这种情况下,不仅要测试读取的结果-1,还要将其与函数被告知读取的字节数进行比较.


一般说明:

函数执行所记录的内容(至少对于C语言的正确实现).您的假设(自主设置0终止,检测后者)都没有记录.