当我尝试从文件中读取数据并进行打印时, printf 会在终端上打印一个空字符串。
使用:Ubuntu 16.04。
gcc版本5.4.0。
内核:4.15.0-43通用
尝试:
写入数据后添加 fsync 调用。
#include <unistd.h>
#include <fcntl.h>
#include <stdio.h>
#define SIZE 6
int main()
{
int ret = -1;
char buffer[SIZE] = { 0 };
int fd = open("data.txt", O_CREAT | O_RDWR, 0666);
if (fd < 0)
{
perror("open()");
goto Exit;
}
if (write(fd, "Hello", 5) < 0)
{
perror("write()");
goto Exit;
}
fsync(fd);
if (read(fd, buffer, SIZE - 1) < 0)
{
perror("read()");
goto Exit;
}
printf("%s\n", buffer);
ret = 0;
Exit:
close(fd);
return ret;
}
期望:应该从文件写入数据或从文件读取数据。
实际:数据写入文件。读取数据后, printf 打印一个空字符串。
答案 0 :(得分:2)
写入后,您需要倒带该文件。
修复:
lseek(fd, 0, SEEK_SET);
请注意,通常不需要对读缓冲区进行零初始化,这是浪费时间。您应该使用read
/ recv
的返回值来确定接收到的数据的长度,并在必要时手动将其终止为零。
修复:
ssize_t r = read(fd, buffer, SIZE - 1);
if (r < 0)
// handle error
buffer[r] = 0; // zero-terminate manually.
printf("%s\n", buffer);