Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 为什么我的read()系统调用返回-1?_C_Linux_System Calls - Fatal编程技术网

C 为什么我的read()系统调用返回-1?

C 为什么我的read()系统调用返回-1?,c,linux,system-calls,C,Linux,System Calls,我在班上做一个关于文件和I/o系统调用的项目。为了回答我的问题,我简化了下面的代码。这本手册我已经读了好几遍了。我以为我理解了read(),但显然我遗漏了什么 int a, bytesRead; char buffer[150]; a = open("/home/JohnDoe/Dowloads/TestFile.dat", 0); if (a < 0) { printf("Error opening file TestFile.dat\n"); return 0; }

我在班上做一个关于文件和I/o系统调用的项目。为了回答我的问题,我简化了下面的代码。这本手册我已经读了好几遍了。我以为我理解了read(),但显然我遗漏了什么

int a, bytesRead;
char buffer[150];

a = open("/home/JohnDoe/Dowloads/TestFile.dat", 0);
if (a < 0) {
    printf("Error opening file TestFile.dat\n");
    return 0;
}

bytesRead = read(a, buffer, 150);
printf("Bytes read: %d\n", bytesRead);
inta,字节读取;
字符缓冲区[150];
a=打开(“/home/JohnDoe/Dowloads/TestFile.dat”,0);
if(a<0){
printf(“打开文件TestFile.dat时出错”);
返回0;
}
字节读取=读取(a,缓冲器,150);
printf(“字节读取:%d\n”,字节读取);

我不明白为什么这个read()调用返回-1。如果我正确理解手册,read()将获取参数文件id、缓冲区和要读取的字节数。整数a(文件id)返回时没有错误,我创建了缓冲区,读取150字节应该没有问题,因为文件包含的字节远远超过150字节。任何帮助都将不胜感激。

检查。如果read返回-1,则会设置errno,您可以查看错误发生的位置。

检查错误所在。您可以使用或打印一条漂亮的消息。我真的怀疑您是否有名为
~/Dowloads/TestFile.dat
的文件。您确实有一个名为
~
的目录?另一方面,请不要使用。如果要以只读方式打开文件,请使用适当的
O_RDONLY
标志。关于路径问题,可以使用相对路径,并对其进行详细记录。或者可以使用命令行参数提供路径,或者在程序中读取路径。编辑后的版本是否仍返回-1?如果这样做有效,那么请恢复编辑,因为询问与问题中所示不同的代码中的错误是没有意义的。