曲径通幽论坛

 找回密码
 立即注册
搜索
查看: 5827|回复: 0
打印 上一主题 下一主题

处理系统调用中的错误

[复制链接]

4918

主题

5880

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34395
跳转到指定楼层
楼主
发表于 2008-11-16 23:04:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
如 open 无法打开指定的文件,read 无法读取,lseek 无法指定指针的位置..此类情况都会返回 -1,-1 是表示在系统调用中出了些问题。调用者每次都必须检查返回值,一旦检测到相应的错误,必须作出相应的处理。

  系统调用会遇到哪些错误呢?每个系统调用都有自己的错误集。如 open 调用,加入要打开的文件不存在,或者虽然存在,但没有读取的权限,或者打开的文件太多,都会导致报错。那如何来确定发生了哪一种错误呢?

  1、确定错误的种类: errno

内核通过全局变量 errno 来指明错误类型,每个程序都可以访问到这个变量。

#define  EPERM    1  /* Operation not permitted */
#define  ENOENT  2  /* No such file or directory */
#define  ESRCH    3  /* No such process */
#define  EINTR    4  /* Interrupted system call */
#define  EIO      5  /* I/O error */

  2、信息错误的提示 perror()

函数 perror( string ) 会自己查找错误代码,在标准错误输出中显示出相应的错误信息,参数 string 是要同时显示出的描述性信息。例如:

int sample()
{
    int fd;
    fd = open("file", O_RDONLY);
    if( fd == -1 )
  {
      perror("Cannot open file");
      return;
  }
...
}
当有错误发生时,可能会看到下面的信息:

Cannot open file: No such file or directory
Cannot open file: Interrupted system call
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|曲径通幽 ( 琼ICP备11001422号-1|公安备案:46900502000207 )

GMT+8, 2025-5-4 13:00 , Processed in 0.077599 second(s), 22 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表