我正在尝试使用系统调用输出文件的内容。代码工作正常,直到我们有一个只包含一行的文件。在这种情况下,输出是没有第一个char的行。这个字母丢失在哪里?
ssize_t rres,wres;
char buff[1];
off_t offset;
int fd = open("tester.txt",O_CREAT | O_RDWR , 0664 );
int line_count = 5;
for(count = 0;line_count != 0;count--){
offset = lseek(fd, count, SEEK_END);
rres = read(fd,buff,1);
if(rres < 0){
return -1;
}
if(*buff =='\n') line_count--;
}
count *= -1; // get abs value of bytes
count++;
while(count--){
wres = write(STDOUT_FILENO,buff,read(fd, buff,1)); // output
}
我正在尝试输出文件的最后5行。但如果我的行少于5行,则第一个字符不会输出。
答案 0 :(得分:2)
for
循环在文件结束前从文件中读取一个字符。如果至少有5行,则它最后一次读取换行符,然后其余代码从该换行符开始读取。
但如果它在没有找到5个换行符的情况下到达文件的开头,则最后read()
读取文件的第一个字符,其余代码在此之后开始读取。
当*buff != '\n'
首先需要打印该字符时。
if (*buff != '\n') {
write(STDOUT_FILENO, buff, 1);
}
count *= -1; // get abs value of bytes
count++;
while(count--){
wres = write(STDOUT_FILENO,buff,read(fd, buff,1)); // output
}