我想通过在C中使用read()命令将文本文件中的数据以20个字符的块读取到缓冲区中,直到文件结尾。
while (n != 0) {
n = read(filedescriptor, buffer, 20);
}
每次都会覆盖缓冲区。是否可以使用read()
命令附加到缓冲区?
答案 0 :(得分:2)
绝对可能。但你应该确定你的缓冲区有多大。
所以,如果你有
#define BUFFER_SIZE 200
char buf[BUFFER_SIZE];
int nbuf = 0; /* number of characters read into buffer */
int r;
你可以写点像
while(nbuf < BUFFER_SIZE) {
int n_to_read = 20;
if(nread + n_to_read > BUFFER_SIZE) /* make sure won't overflow buffer */
n_to_read = BUFFER_SIZE - nread;
r = read(fd, &buf[nbuf], n_to_read);
if(r <= 0) break; /* error / EOF */
nbuf += r;
}
如果您想证明您对C中数组和指针之间“等价”的理解,可以将read
调用重写为
r = read(fd, buf + nbuf, n_to_read);
确实这是很多人写的方式。
P.S。我会使用fread
和FILE *
指针而不是read
和整数文件描述符。