使用C中的read()附加到缓冲区

时间:2016-01-19 21:40:36

标签: c file append buffer

我想通过在C中使用read()命令将文本文件中的数据以20个字符的块读取到缓冲区中,直到文件结尾。

while (n != 0) {    
    n = read(filedescriptor, buffer, 20);
}

每次都会覆盖缓冲区。是否可以使用read()命令附加到缓冲区?

1 个答案:

答案 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。我会使用freadFILE *指针而不是read和整数文件描述符。