如何获得c中的读操作错误

问题描述

| 以下代码返回-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
打印错误消息和自定义字符串。     

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...