C - read() 是否添加'\0'?
C - does read() add a '\0'?
有必要吗?我一直对这类东西很模糊,但如果我有类似的东西:
char buf[256];
read(fd, buf, 256);
write(fd2, buf, 256);
除了那些函数 return -1 的情况之外,这里是否存在潜在的错误?
如果它只读取40个字符,它会在它后面加一个\0吗? (并且会写识别 \0 并停止?
另外,如果要读取256个字符,那256个字符后面是否有\0?
没有
考虑读取二进制数据(例如文件中的照片):添加额外的字节会损坏数据。
does read() add a '[=15=]'?
不,不是。它只是读取。
The read() function shall attempt to read nbyte bytes from the file associated with the open file descriptor, fildes, into the buffer pointed to by buf.
Is there potential for error here, other than the cases where those functions return -1?
read()
可能 return 0
表示文件结束。
如果读取(也从套接字描述符)read()
不一定会读取指定的字节数。因此,在这种情况下,不仅要针对 -1
测试读取的结果,还要将其与函数被告知要读取的字节数进行比较。
一般说明:
函数执行记录的内容(至少对于 C 语言的正确实现)。您的两个假设(自动设置 0 终止,检测后者)都没有记录。
来自手册页:
Synopsis
#include <unistd.h>
ssize_t read(int fd, void *buf, size_t count);
也就是void *
,不是char *
,因为read()
读的是字节,不是字符。它读取零字节以及任何其他值,并且由于字节块(与字符串相反)没有终止,所以 read()
没有。
Does it have to?
除非从文件中成功读取的数据包含 '[=10=]'
...
Is there potential for error here, other than the cases where those functions return -1?
是的。 read
returns 实际读取的字节数(或负值表示失败)。如果您选择 write
超过该字节数到您的其他文件,那么您正在写入潜在的垃圾。
有必要吗?我一直对这类东西很模糊,但如果我有类似的东西:
char buf[256];
read(fd, buf, 256);
write(fd2, buf, 256);
除了那些函数 return -1 的情况之外,这里是否存在潜在的错误?
如果它只读取40个字符,它会在它后面加一个\0吗? (并且会写识别 \0 并停止? 另外,如果要读取256个字符,那256个字符后面是否有\0?
没有
考虑读取二进制数据(例如文件中的照片):添加额外的字节会损坏数据。
does read() add a '[=15=]'?
不,不是。它只是读取。
The read() function shall attempt to read nbyte bytes from the file associated with the open file descriptor, fildes, into the buffer pointed to by buf.
Is there potential for error here, other than the cases where those functions return -1?
read()
可能 return 0
表示文件结束。
如果读取(也从套接字描述符)read()
不一定会读取指定的字节数。因此,在这种情况下,不仅要针对 -1
测试读取的结果,还要将其与函数被告知要读取的字节数进行比较。
一般说明:
函数执行记录的内容(至少对于 C 语言的正确实现)。您的两个假设(自动设置 0 终止,检测后者)都没有记录。
来自手册页:
Synopsis
#include <unistd.h>
ssize_t read(int fd, void *buf, size_t count);
也就是void *
,不是char *
,因为read()
读的是字节,不是字符。它读取零字节以及任何其他值,并且由于字节块(与字符串相反)没有终止,所以 read()
没有。
Does it have to?
除非从文件中成功读取的数据包含 '[=10=]'
...
Is there potential for error here, other than the cases where those functions return -1?
是的。 read
returns 实际读取的字节数(或负值表示失败)。如果您选择 write
超过该字节数到您的其他文件,那么您正在写入潜在的垃圾。