我遇到多次调用 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的内存做些什么。它是否正确?我该怎么做才能解决这个问题?
博多
答案 0 :(得分:2)
如果输入中只有一个字符,那么很明显您只能获得一次。这与文件中的搜索指针有关。使用O_RDWR标志执行打开时,搜索指针位于文件的开头。然后在每次调用读取时移动读取的字节数。当搜索指针到达文件末尾时,read的调用将用0填充缓冲区并返回适当的值。
如果要反复阅读相同的字符,则必须使用lseek函数重置搜索指针。
答案 1 :(得分:0)
根据opengroup未指定同一管道,FIFO或终端设备上的多个并发读取的行为。