gpt4 book ai didi

c - 使用 POSIX 系统函数在 C 中实现 rev 命令

转载 作者:太空宇宙 更新时间:2023-11-04 04:09:39 24 4
gpt4 key购买 nike

我正在尝试仅使用系统调用在 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 - 使用 POSIX 系统函数在 C 中实现 rev 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58702528/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com