APUE学习笔记(01)-UNIX基础知识

    技术2025-12-15  15

    1、认识一些术语:内核(kernel) shell 系统调用(system call) 文件描述符(file descriptor) 等。

     

    2、每远行一个新程序时,所有的shell都为其打开三个文件描述符:standard input、standard output、standard error。两个常量STDIN_FILENO和STDOUT_FILENO定义在中,其典型值分别是0和1。

     

    3、出错处理:

    当UNIX出错时,常常返回一个负值,而且整形变量errno通常被设置为含有附加信息的一个值,大约有15种不同的errno值。某些函数并不返回负值而是使用另一种约定(比如返回NULL指针)。

    文件中定义了符号errno以及可以赋予它的各种常量,这些常量都以字符E开头。在Linux中,出错常量在errno(3)手册页中列出。

    errno的定义:extern int errno;

    在支持多线程的环境中,多个线程共享进程地址空间,每个线程都有属于它自己的局部errno以避免一个线程干扰另一个线程。在Linux中,将其定义为:

    extern int *__errno_location(void);

    #define errno (*__errno_location())

    对于errno应当知道的两条规则:

    (1) 如果没有出错,则其值不会被一个例程清除。因此,仅当函数的返回值指明出错时,才检验其值。

    (2) 任一函数都不会将errno值设置为0,在中定义的所有常量都不为0。

    1 #include <stdio.h> 2 #include <errno.h> 3 4 int main(int argc, char **argv) 5 { 6     fprintf(stderr, "EACCES: %s/n", strerror(EACCES)); 7     errno = ENOENT; 8     perror(argv[0]); 9     exit(0); 10 }

     

    4、时间值:

    UNIX系统一直使用两种不同的时间值:

    (1) 日历时间:1970年1月1日00:00:00以来所经过的秒数累计值。用于记录文件最近一次的修改时间等。系统基本数据类型time_t用于保存这种时间值。

    (2) 进程时间:也称为CPU时间,用以度量进程使用的中央处理机资源。进程时间以时钟滴答计算。系统基本数据类型clock_t用于保存这种时间值。

     

    最新回复(0)