我正在尝试使用Linux系统编程做一些低级文件处理。 我正在尝试打开一个文件:使用 open(),使用 write() 向文件写入内容,并使用 read() 读取文件的内容。
我的代码如下:
int32_t fd;
int32_t bytes;
fd = open(fileName, O_RDWR | O_NOCTTY | O_NDELAY);
retVal = write(fd, writeBuffer, sizeof(writeBuffer));
//The write buffer is a character array of size 20 initialized to "abc123abc123abc123\r"
bytes = read(fd, readBuffer, sizeof(writeBuffer));
//The read buffer is a character array of size 20 initialized to "xxxxxxxxxxxxxxxxxxx\r"
我的代码没有错误,但没有读取任何字节。 执行结束时,bytes = 0,readBuffer 仍为“xxxxxxxxxxxxxxxxxx” ”
我哪里出错了?
我尝试了上面的代码
普通的 Unix 文件描述符默认是为顺序读写而设计的。每个文件描述符都包含一个“当前位置”,该位置由每个
read
或 write
操作更新。您的 write
操作写入 sizeof writeBuffer
字节,并将当前位置前进那么多字节。然后您的 read
操作尝试从该高级位置读取。由于文件中的该位置还没有数据,因此 read
不会读取任何字节。
要读取之前写入的数据,必须调整文件描述符中的当前位置,可以使用
lseek
: 来实现
off_t offset = lseek(fd, - (off_t) sizeof writeBuffer, SEEK_CUR);
if (offset == -1)
{
fprintf(stderr, "Error, lseek failed.\n");
exit(EXIT_FAILURE);
}