UNIX基础知识

1.1 unix的体系结构

内核(kernel)
系统调用(system call)
库函数
shell
应用程序

1.2 登录

系统口龙文件(/etc/passwd)可以查看登录名,登录项包含7个字段

  • username
  • password
  • uid(user id)
  • gid(group id)
  • comment
  • home directory
  • shell
    目前所有系统已经将password放到另一个文件中。

shell是一个命令行解释器,用户登录后,
可以向shell输入命令,可通过终端(交互式shell),也可通过文件(shell脚本)

1.3 文件和目录

unix文件系统由目录和文件组成一种层次结构,起始目录称为root('/'),文件属性指文件类型(普通文件或目录)、文件的大小、文件所有者、文件权限(其他用户的访问权限)、文件最后修改时间等。
创建新目录会自动创建两个文件名.(当前目录)和..(父目录)
每个进程都有一个工作目录(working directory),相对路径都从工作目录开始解释,进程可通过chdir()更改工作目录。

1.4输入和输出

文件描述符(file descriptor)是一个非负整数,内核用来标示一个特定进程正在访问的文件。内核打开或创建一个文件时,返回一个文件描述符,可用来读写文件。
标准输入输出

#include
#define STDIN_FILENO 0
#define STDOUT_FILENO 1
#define STDERR_FILENO 2

不带缓冲的IO,j即标准IO,包含open/read/write/lseek/close都对文件描述符进行操作。
带缓冲的IO,包含printf/fgets/fputs.

1.5 程序和进程

程序(program)指存放在磁盘的可执行文件,进程(process)指程序的执行实例。每个进程有唯一的非负整数标示符,称为进程ID(process ID)。
有三个用于进程可控制的主要函数:fork、exec和waitpid。(exec包含6中变体)
进程可以有多个控制线程(thread),所有线程共享进程的统一地址空间、文件描述符、栈以及进程相关属性,可访问同一存储区,需要处理好同步关系。

1.6 出错处理

unix函数出错时,返回一个负值,且整数变量errno会设置错误信息。errno在文件中定义

#include
//是否支持多线程
#ifdef SUPPORT_MULTI_THREADS
extern int errno;
#elseexrern int* __errno_locaiton(void);
#define errno (*__errno_locaiton())
#endif//错误编号(!0)
#define EACCESS
#define EPERM

1.7 用户标识

用户ID为0的用户为root,有超级用户特权
组ID,不同用户ID可以拥有相同组ID,可以设置文件权限使相同组ID的用户都能存取该文件,而组外用户不能。

1.8 信号

信号用于通知进程已发生某种情况。进程可以对信号做三种选择的处理

  • 忽略该信号
  • 按照系统默认方式处理
  • 提供一个函数,信号发生时执行该函数(捕捉信号)

1.9 时间值

unix系统使用两种不同的时间

  • 日历时间。自1970年1月1日00:00:00以来经过的秒数累计值。
    *进程时间。即CPU时间,用来度量进程使用的cpu资源

1.10 系统调用和库函数

系统调用时内核提供的最小接口,仅实现单一的功能,库函数通常提供比较复杂且常有的功能,库函数通过调用系统调用实现。

你可能感兴趣的:(UNIX基础知识)