微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

我怎样才能得到一个读取操作的错误c

下面的代码返回-1,我怎么知道什么是错的? 得到一个详细的错误什么的?

if (read(programFile,value,sizeof(FRAME)) == -1) { return SY@R_502_6063@_CALL; }

重复的USB虚拟串行端口被创build – 可能会导致这种情况?

如何将图像添加到我的应用程序

在wxwidgets中,如何locking一个在GUI线程和工作线程之间共享的向量?

虚拟到内核逻辑地址

为什么我的C程序花费的时间比自己计算的时间多?

你需要查看errno ,这是一个由系统调用设置的变量来指示错误。 您可以使用便利功能perror来获得一个人类可读的打印输出

if (read(prog,sizeo(FRAME) == -1) { perror("read"); // handle error }

它可以返回像No such file or directory 。 无论哪种方式,它是一个很好的做法,使用它。

请查看man errno和man perror以获取更多信息。

您可以检查全局变量errno ,如手册页中所指定,

返回值

如果成功,则返回实际读取的字节数。 在读取文件结束时,返回零。 否则,将返回-1 ,并将全局变量errno设置为指示错误

例如,

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 SY@R_502_6063@_CALL; }

你可以用errno来使用error函数。 这将打印错误消息和作为参数传递的自定义字符串。

其他

#include <stdio.h> if (read(programFile,sizeof(FRAME)) == -1) { perror ("damn It!!"); return SY@R_502_6063@_CALL; }

使用perror打印错误消息和自定义字符串。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐