0

I am experiencing that calling read_from_fd more than once causes the data to be empty.

#include <fcntl.h>
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>

int fd;

void read_from_fd() {
    char data[2];

    read(fd, data, 1);

    data[1] = 0x00;

    printf("data %s\n", data);
}

int main(void) {
    fd = open("test.txt", O_RDWR);

    read_from_fd();
    read_from_fd();
    read_from_fd();
}

So the first read prints data but the second and third one print something empty.

I guess this has to do something with the memory from char. Is this correct? What do I have to do to fix this?

Bodo

4

2 回答 2

2

如果输入中只有一个字符,那么很明显你只会得到一次。这与文件中的查找指针有关。当您使用 O_RDWR 标志执行打开时,查找指针放置在文件的开头。然后在每次调用 read 时,都会移动读取的字节数。当搜索指针到达文件末尾时,对 read 的调用将用 0 填充缓冲区并返回适当的值。

如果您想一遍又一遍地读取相同的字符,您必须使用函数 lseek 重置查找指针。

于 2013-06-19T06:59:33.177 回答
0

根据opengroup未指定同一管道、FIFO 或终端设备上的多个并发读取的行为。

于 2013-06-19T06:52:14.683 回答