以下代码返回-1,我怎么知道什么是错的? 得到一个详细的错误或什么?
if (read(programFile, value, sizeof(FRAME)) == -1) {
return SYSTEM_CALL;
}
答案 0 :(得分:3)
您需要查看errno
,这是系统调用设置的变量,用于指示错误。您可以使用便捷功能perror
来获取人类可读的打印输出。
if (read(prog, value, sizeo(FRAME) == -1) {
perror("read");
// handle error
}
它可以返回No such file or directory
之类的内容。无论哪种方式,使用它都是一种很好的做法。
查看man errno
和man perror
了解详情。
答案 1 :(得分:1)
您可以按照手册页
中的说明查看global variableerrno
返回值
如果成功,则返回实际读取的字节数。在读取文件结尾时,返回零。否则,返回,并设置全局变量
errno
以指示错误。
例如,
ssize_t bytesRead = read(...);
if (bytesRead == -1) {
switch (errno) {
case EINVAL: return "Invalid FD";
case EISDIR: return "FD is a directory";
...
}
}
答案 2 :(得分:0)
来自read
手册页:
成功时,读取的字节数 返回(零表示结束 文件),文件位置是 由这个数字提前。它不是 如果此数字小于字节数,则出错 要求; 这可能发生在例如因为实际上更少的字节 可得到 现在(也许是因为我们接近文件结尾,或者因为 我们 从管道或终端读取,或因为读取() 是 被信号打断了。 出错时,返回-1,并设置errno 适当即可。在这种情况下,它是否未指定是否 文件 位置(如果有的话)改变。
(我的重点)
因此,您可以使用errno
和strerror
来获取错误的字符串说明。
答案 3 :(得分:0)
Errno
,以便检查错误是什么。更多信息here
答案 4 :(得分:0)
#include <error.h>
#include <errno.h>
if (read(programFile, value, 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, value, sizeof(FRAME)) == -1) {
perror ("Damn It!!");
return SYSTEM_CALL;
}
使用perror
打印错误消息和自定义字符串。