[使用POSIX系统功能在C中实现rev命令

问题描述 投票:1回答:1

我试图仅使用系统调用在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
c linux file operating-system reverse
1个回答
0
投票

您的代码清楚地向后读取文件,一次读取一个字符,并在读取文件时打印每个字符。您为什么会认为它会逐行反转?它甚至不会注意每一行的结尾。

如果向后读取文件,则将读取的最后一个字符(因此将打印的最后一个字符)是文件中的第一个字符,通常不是换行符。

© www.soinside.com 2019 - 2024. All rights reserved.