下面的代码返回-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来描述错误的字符串。
#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; }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。