我试图仅使用系统调用在C中实现rev linux调用。我能够实现它,但是我的代码也反转了文件的行,因此第1行是现在文件中的最后一行。最后一行也不会在stdout上跳入新行。我不确定为什么要这样做。
这是我的代码:
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>
#include <stdio.h>
#include <sys/types.h>
#define LINE_BUFFER 1024
int charCount(const char *name1);
int main(int argc, char* argv[]) {
if(argc ==2){
charCount(argv[1]);
}else{
printf("Provide a file\n");
}
return 0;
}
int charCount(const char *name1)
{
char buffer[LINE_BUFFER];
int fd;
int nread;
int i = 0;
if ((fd = open(name1, O_RDONLY)) == -1)
{
perror("Error in opening file");
return (-1);
}
int size = lseek(fd,-1,SEEK_END);
while(size>=0)
{
nread=read(fd,buffer,1);
write(1,buffer,1);
lseek(fd, -2,SEEK_CUR);
size--;
}
close(fd);
return(0);
}
输入
Contents of file 1:
Hello World
Hi World
输出
dlroW iH
dlroW olleH
所需的输出:
dlroW olleH
dlroW iH
您的代码清楚地向后读取文件,一次读取一个字符,并在读取文件时打印每个字符。您为什么会认为它会逐行反转?它甚至不会注意每一行的结尾。
如果向后读取文件,则将读取的最后一个字符(因此将打印的最后一个字符)是文件中的第一个字符,通常不是换行符。