【发布时间】:2015-01-07 15:05:00
【问题描述】:
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/types.h>
#include <stdint.h>
int main()
{
int file;
off_t offset;
if((file=open("testfile.txt",O_RDONLY)) < -1)
return 1;
char buffer[19];
if(read(file,buffer,19) != 19) return 1;
fprintf(stdout,"%s\n",buffer);
if(offset = lseek(file,-19,SEEK_END) < 0) return 1;
fprintf(stdout,"%jd\n",(intmax_t)offset);
if(read(file,buffer,19) != 19) return 1;
fprintf(stdout,"%s\n",buffer);
return 0;
}
输出如下:
这是一个测试文件��
0
这是一个测试文件
��
testfile.txt:
这是一个测试文件 测试 SEEK_END 的工作原理 这是一个测试文件
我尝试了不同的偏移格式,例如 %ld,%d,但输出仍然相同。 无法弄清楚为什么垃圾会出现在第一行和最后一行的末尾。请帮忙。
【问题讨论】:
-
你不会终止你的字符串。
-
我必须专门使用 open() 系统调用并使用 fd 进行其他系统调用并传递它。我正在处理的项目处理读取和写入二进制文件并在不同进程之间共享它。我不想通过包含几乎所有地方都使用 open() 的 fopen() 来使代码变得混乱。因此,坚持开放。
标签: c file printf offset lseek