从文件中多次读取失败(需要char数组malloc?)

时间:2013-06-19 06:45:00

标签: c arrays memory io char

我遇到多次调用 read_from_fd 会导致数据为空。

#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();
}

所以第一次读取打印数据,但第二次和第三次读取打印空白。

我想这必须对char的内存做些什么。它是否正确?我该怎么做才能解决这个问题?

博多

2 个答案:

答案 0 :(得分:2)

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

如果要反复阅读相同的字符,则必须使用lseek函数重置搜索指针。

答案 1 :(得分:0)

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