问题描述
|
以下代码返回-1,我怎么知道怎么了?
得到详细的错误或什么?
if (read(programFile,value,sizeof(FRAME)) == -1) {
return SYSTEM_CALL;
}
解决方法
您需要查看“ 1”,这是系统调用设置的变量,用于指示错误。您可以使用便利功能
perror
来获得易于阅读的打印输出。
if (read(prog,value,sizeo(FRAME) == -1) {
perror(\"read\");
// handle error
}
它可以返回类似No such file or directory
的信息。无论哪种方式,使用它都是一个好习惯。
查看man errno
和man perror
了解更多信息。
, 您可以按照手册页中的说明检查全局变量“ 1”,
返回值
如果成功,则返回实际读取的字节数。读取文件结束时,返回零。否则,返回-1,并且设置全局变量“ 1”以指示错误。
例如,
ssize_t bytesRead = read(...);
if (bytesRead == -1) {
switch (errno) {
case EINVAL: return \"Invalid FD\";
case EISDIR: return \"FD is a directory\";
...
}
}
, 在read
手册页中:
成功后,读取的字节数
返回(零表示结束
文件),文件位置为
按此数字前进。这不是
如果此数字小于字节数,则错误
要求;
例如,这可能是因为实际上较少的字节
可用的
现在(也许是因为我们接近文件结尾,或者是因为
我们
正在从管道或终端读取),或者因为read()
原为
被信号打断。错误时,返回-1,并设置errno
适当地。在这种情况下,未指定
文件
位置(如果有)发生变化。
(我的重点)
因此,可以使用errno
和strerror
来表示错误的字符串。
, 应设置Errno
,以检查错误是什么。更多信息在这里
, #include <error.h>
#include <errno.h>
if (read(programFile,sizeof(FRAME)) == -1) {
error (0,errno,\"Damn it %s\",my_string);
/* use nonzero as the 1st param to exit after this function */
return SYSTEM_CALL;
}
您可以将error
功能与errno
一起使用。这将打印错误消息和自定义字符串,您将其作为参数传递。
其他
#include <stdio.h>
if (read(programFile,sizeof(FRAME)) == -1) {
perror (\"Damn It!!\");
return SYSTEM_CALL;
}
使用perror
打印错误消息和自定义字符串。