登录
/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 可以统计某一进程执行所用的时间
系统调用和库函数
库函数底层调用的是系统调用。