第一章:Unix基础知识

时间:2021-04-22 05:56:22

登录

     /etc/passwd文件中存放的是登录用户的相关信息

 

文件描述符

    文件描述符是一个非负整数,用来标识一个进程正在打开访问的文件。在<unistd.h>头文件中,定义了 三个标准文件描述符:STDIN_FILENO(标准输

  入),STDOUT_FILENO(标准输出)  , STDERR_FILENO(标准出错)  。 虽然 一般情况下,他们的值分别为 0、1、 2  , 但是考虑到可移植性,还是应该

  使用他们的名字而非数值。

    在标准库中,I/O函数使用文件指针(FILE*)来操作文件。我们可以将文件指针转换为文件描述符,这就用到了头文件<stdio.h>中提供的一个函数:

  int fileno(FILE*fp); 从该函数返回的是转换后的描述符值。

进程

    进程表示正在执行的程序的实例。正在执行的程序成为任务。一般用于进程控制的程序主要有三个  fork()  、 waitpid() 、 exec()(一组6个函数)。

 

出错处理

    Unix中函数出错通常返回-1 , 返回值为指针类型的出错时通常返回的是NULL空指针。

    出错的时候,错误码放在errno全局变量中。可以通过perror()或stderr()打印出错误码对应的文本信息 。 在调用perror()的时候,我们习惯于将

  argv[0] 作为参数传递给他。

    在多线程环境中,errno 如果为多个线程共同使用的话,会带来不同线程的错误干扰的问题,所以 对于每个线程,都有属于自己的errno,定义如下

              extern  int*  __errno_location(void);

              #define  errno  (*__errno_location())

    一般发生与资源相关的非致命性错误的时候,处理方法是 延迟一段时间,然后重试。对于系统调用被系统中断的错误(即发生 EINTR 错误的时候),

  一般是重新调用该系统调用,当然,有些系统调用是不能被重启的。

 

用户标识

    用户ID为 0  的用户为root用户 ,,其具有超级权限。

    组ID : 组文件将组名映射为组ID , 其所在的文件为 /etc/group 。 如今的Unix中使用32位的整形数表示用户ID和组ID。

    附加组ID:在 Unix中,允许属于一个组的用户同时属于另一个组。一个用户 最多可同时属于16个组。

 

信号

    信号是通知一个进程发生某种情况的一种技术。一般来所进程通过三种手段来处理信号

        1、忽略信号的处理 : 因为某些信号是由异常引发的,其忽略的后果不定,所以不推荐这种方式。

        2、系统默认处理方式: 例如SIGFPE (浮点异常信号)的系统默认处理为结束进程。

        3、提供一个信号处理函数  , 来捕捉并处理某个异常。

 

时间

    日历时间: 1979年1月1日 00:00:00  到现在所经过的秒数 , 用 time_t 类型的变量保存。

    进程时间:用时钟滴答数来表示 。 典型的有 一秒钟 50/60/100 滴答。用clock_t类型的变量来保存。可用 sysconf(_SC_CLK_TCK) 来获取系统每秒滴答数。

    一个进程的时间可从三个方面衡量:

        1、时钟时间  real

        2、用户CPU时间  user

        3、系统CPU时间  sys

        real = user +  sys

    用 time  xxx.out 可以统计某一进程执行所用的时间

系统调用和库函数

    库函数底层调用的是系统调用。