Skip to content

Latest commit

 

History

History
60 lines (44 loc) · 2.17 KB

chapter1.md

File metadata and controls

60 lines (44 loc) · 2.17 KB

unix 体系结构

内核 --> 系统调用/库函数 --> shell --> 应用软件

用户标识

用户id,组id,对应的信息存放在 /etc/passwd/etc/group

打印当前登录用户id和组id:

int main(int argc, char *argv[]){
    printf("uid = %d, gid = %d\n", getuid(), getgid());
    exit(0);	
}

系统调用和库函数

           +--------------------------------------+
           |                    +---------------+ |
           |                    |               | |
           |                    | application   | |
           |                    +---------------+ |
           |                         +            |
           |                         |      +     |
           |                         |      |     |
           | +---------------+       |      |     |
           | |               |<------+      |     |
           | | C Lib         |              |     |
           | +-------+-------+              |     |
           |         |                      |     |
           +---------|----------------------|-----+
                     |                      |
                     |                      |
           +---------|----------------------|-----+
           |         |                      |     |
           |         v                      |     |
           |   System Call  <---------------+     |
           |                                      |
           |                                      |
           |                                      |
           +--------------------------------------+

可以看出库函数还是基于系统调用之上的。Unix为每个系统调用在标准C库中设置一个具有相同名字的函数。一般我们基于Unix的环境编程,直接操作C库函数来完成对系统调用。

习题

  1. ll命令可以看出来(ls -il)
  2. 进程id是递增的
  3. perror中的参数是 char * ,为指针,防上改变。 而 strerror中的参数 int 传值
  4. (2 ** 31 -1)/(243600365) = 68 年,即1970 + 68 = 2038
  5. (2 ** 31 -1)/(243600100) = 248 天