gpt4 book ai didi

c - 当我尝试读取 txt 文件时,它返回 : Cannot read input file

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

我正在尝试编写一个程序来比较两个文件并返回它们是否相等。

我只能使用以下函数:fork、dup、dup2、open、write、exec、read。

当我在linux gcc上编译程序时,它返回无法读取输入文件

shay@shay-Latitude-E6410 ~/workspace/targ1OS $ ./comp.out input.txt input.txt Cannot read input file

代码:

/*
* This function checks if the files are similar or similar by case sensitive
* it gets 2 files, and returns: 3 if identical, 2 if identical but only if not
* case sensitive or 1 else.
*/
int CheckSimilar(char *path1, char *path2){

//open the files
int fd1 = open(path1, O_RDONLY), fd2 = open(path2, O_RDONLY);
int flag = 1;//this flag is to check for case sensitive
char *firstFile = NULL, *secondFile = NULL;
int readBytes, read2ndFile;

if (fd1 == -1 || fd2 == -1){
write(2, "Cannot open input file\n", 24);
return -1;//checks if there is a problem opening the file
}

while (1){

readBytes = read(fd1, firstFile, 1);
read2ndFile = read(fd2, secondFile, 1);

if (readBytes < 0 || read2ndFile < 0){
write(2, "Cannot read input file\n", 24);
return -1;
}//checks if there is a problem reading chars from the file

if (!readBytes || !read2ndFile)
break;

if (*firstFile == *secondFile)
continue;//the chars are equal
//checks if it's an abc char
else if ((*firstFile > 64 && *firstFile < 91) ||
(*firstFile > 96 && *firstFile < 123)){
// checks for not case sensitive
if ((*firstFile - *secondFile) == 22 ||
(*firstFile - *secondFile) == -22)
flag = 0;
}
else
return 1;
}

close(fd1);
close(fd2);

if (readBytes != read2ndFile)
return 1;
if (flag)
return 2;
return 3;
}

最佳答案

让自己的世界变得更美好,向系统询问errno,并阅读有关系统调用 read(2)、open(2)、... 和 errno(3) 的手册

(例如read(2)是一个手册页地址,表示:手册页“read”第2节,阅读man man about各部分)。

#include <stdio.h>
#include <string.h>
#include <errno.h>
[...]

char* err = strerror(errno);
char* errlen = err ? strlen(err): 0;
char* form = "Cannot read input file since \"%s\".\n"
if (errlen == 0) {
form = "Cannot read input file failed with unknown error %d.\n";
fprintf(stderr, form, errno);
}
else {
fprintf(stderr, form, err);
}

由于您无法使用 fprintf,因此我将其留给您来编写表格。至少你应该在读取失败后打印出errno

关于c - 当我尝试读取 txt 文件时,它返回 : Cannot read input file,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36304001/

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