APUE学习之出错处理

简介: 当UNIX函数发生错误时,通常会返回一个负值,而且整形变量errno通常被设置为具有特定信息的值。        errno是全局变量,仅当函数出错才有被改变。对待errno,应注意两条规则           1:如果没有出错,其值不会被例程清除,也就是说,当且仅当函数出错时,马上检查errno的值才有意义。
     当UNIX函数发生错误时,通常会返回一个负值,而且整形变量errno通常被设置为具有特定信息的值。
 
     errno是全局变量,仅当函数出错才有被改变。对待errno,应注意两条规则
          1:如果没有出错,其值不会被例程清除,也就是说,当且仅当函数出错时,马上检查errno的值才有意义。
          2:任何函数都不会将errno的值置为0。
 
     C标准定义了两个函数,用于打印出错信息:char *strerror(int errnum)和void perror(const char *msg)。
 
     strerror函数将errnum(通常就是errno的值)映射为出错消息字符串,并返回该字符串的指针。
     perror函数基于errno的当前值,在标准错误上产生一条出错消息然后返回。
 
例子:
     #include "apue.h"
     #include <errno.h>
 
     int main(int argc, char **argv)
     {
          fprintf(stderr, "EACCES: %s\n", strerror(EACCES));
          errno = ENOENT;
          perror(argv[0]);
          return 0;
     }
 
     ./a.out
     EACCES: Permission denied
     ./a.out: No such file or directory
目录
相关文章
|
8月前
|
Linux
网络编程之信号(处理僵尸进程的终极办法)之初识信号捕捉器
接着我们之前的管道所提出来的问题() 在创建子进程之后,子进程究竟何时终止????调用waitpid函数后还要无休止的等待子进程终止吗???”,这显然会是一个问题。因为父进程往往与子进程一样繁忙,因此我们不能只调用waitpid函数来等待子进程终止。那么我们应该怎么办呢??? 信号闪亮登场!!!!!
64 0
|
4月前
|
Linux C语言
C语言 多进程编程(四)定时器信号和子进程退出信号
本文详细介绍了Linux系统中的定时器信号及其相关函数。首先,文章解释了`SIGALRM`信号的作用及应用场景,包括计时器、超时重试和定时任务等。接着介绍了`alarm()`函数,展示了如何设置定时器以及其局限性。随后探讨了`setitimer()`函数,比较了它与`alarm()`的不同之处,包括定时器类型、精度和支持的定时器数量等方面。最后,文章讲解了子进程退出时如何利用`SIGCHLD`信号,提供了示例代码展示如何处理子进程退出信号,避免僵尸进程问题。
|
8月前
|
存储 安全 数据管理
Linux系统编程教程之Linux线程函数的使用:讲解Linux线程函数
Linux系统编程教程之Linux线程函数的使用:讲解Linux线程函数
80 1
|
8月前
|
存储 缓存 Unix
C语言第四章(进程间的通信,管道通信,pipe()函数)
C语言第四章(进程间的通信,管道通信,pipe()函数)
345 0
|
Java Linux
linux系统编程 进程控制
linux系统编程 进程控制
100 0
|
存储 Linux C语言
Linux系统编程(再论execve)
Linux系统编程(再论execve)
84 0
|
Shell Linux C语言
【Linux进程】三、进程控制——fork()系统调用深度刨析
【Linux进程】三、进程控制——fork()系统调用深度刨析
295 0
【Linux进程】三、进程控制——fork()系统调用深度刨析
C中使用errno查看函数调用的错误
C中使用errno查看函数调用的错误
79 0
|
存储
【APUE】文件 I/O 操作(一)
【APUE】文件 I/O 操作(一)
228 0
【APUE】文件 I/O 操作(二)
【APUE】文件 I/O 操作(二)
118 0