口令文件
通常是/etc/passwd
,口令文件中的登录项由7个冒号分隔的字段构成,如下:
登录名:加密口令:数字用户ID:数字组ID:注释字段:起始目录:shell程序
目前,所有的系统已将加密口令移到其他文件中.
起始目录
登录时,工作目录设置为起始目录,该起始目录由口令文件中获得.
文件描述符
文件描述符通常是一个小的非负整数,内核用以标记一个特定进程真在访问的文件.
当内核打开一个现有文件或创建一个新文件时,它都返回一个文件描述符.
在读,写文件时,都可以使用这个文件描述符.
标准输入/标准输出/标准错误
每运行一个新程序时,所有的shell都为其打开3个文件描述符,即标准输入(stdin),标准输出(stdout),标准错误(stderr).
如果不做特殊处理,这3个描述符都链接向终端.
大多数shell都提供一种方法,能够重定向这3个描述符.
头文件<unistd.h>
中有两个常量STDIN_FILENO
和STDOUT_FILENO
,他们定义了标准输入和标准输出的文件描述符.
三个进程控制函数
fork
:创建一个新线程.
exec
:执行一个进程.
waitpid
:等待进程执行结束.
两个出错函数
char *strerror(int errnum)
:把errnum
映射为一个出错消息字符串.
void perror(const char *msg)
:输出msg
指向的字符串,然后输出当前errno
对应的错误字符串.
将argv[0]
传给perror()
,可以在调用多个程序的时候分清是哪个程序出现了错误.
出错恢复
<error.h>
中定义的错误分为两类,致命性的和非致命性的.
对于致命性的错误,无法恢复其动作,最多能做的是输出出错信息,然后退出.
对于非致命性的错误,有时可以妥善的处理.
用户标识
用户ID:一个数值,用来标识不同的用户,0代表root用户.
组ID:口令文件登录项叶包括用户的组ID,他也是一个数值.组文件/etc/group
将组名映射成组ID.
getuid()
和getgid()
可以获取当前用户的用户ID和组ID.
附属组ID:大多数系统支持用户属于16个附属组,POSIX要求系统至少支持8个附属组.登陆时读文件/etc/group
,寻找包含该用户的前若干个复数组.
信号
信号用于通知进程发生了某种情况,进程有下面3种方法处理信号:
-
忽略信号.
-
按系统默认方式处理.
-
提供一个函数,信号发生时调用该函数,这被称为捕抓该信号.
中断键Ctrl+C
和退出键Ctrl+
能中断当前运行的进程.
时间
日历时间: 自协调世界时(UTC),一个整数,表示当前时间距离1970.1.1:00:00:00已经过去多久了.系统基本数据类型time_t
用于保存这种时间
进程时间:用以衡量进程使用的cpu资源.系统基本类型clock_t
用于保存这个值.
ISO C
ISO C:第一个官方标准.此标准不仅定义了语言程序设计的语法和语义,还定义了其标准库.现今的unix系统都提供C标准中定义的库函数,所以该标准库非常重要.
ISO/IES 9899:1999:第二个官方标准.改善了进行数值处理的应用软件的支持.其中增加了关键字restrict
,该关键字告诉编译器该指针所应用的对象在函数中只通过该指针进行访问.
ISO/IEC 9899:2011:第三个官方标准.也是最新的标准.
ISO C定义的头文件
头文件 | 说明 |
---|---|
<assert.h> |
验证程序断言 |
<complex.h> |
复数算数运算支持 |
<ctype.h> |
字符分类和映射支持 |
<errno.h> |
出错码 |
<fenv.h> |
浮点环境 |
<float.h> |
浮点常量和特性 |
<inttypes.h> |
整数格式变换 |
<iso646.h> |
赋值,关系以及一元操作符宏 |
<limits.h> |
实现常量 |
<locale.h> |
本地化类别及相关定义 |
<math.h> |
数学函数,类型声明及常量 |
<setjmp.h> |
非局部goto |
<signal.h> |
信号 |
<stdarg.h> |
可变长参数表 |
<stdbool.h> |
布尔类型和值 |
<stddef.h> |
标准定义 |
<stdint.h> |
整型 |
<stdio.h> |
标准IO库 |
<stdlib.h> |
实用函数 |
<string.h> |
字符串操作 |
<tgmath.h> |
通用类型数学宏 |
<time.h> |
时间和日期 |
<wchar.h> |
扩充的多字节和宽字符支持 |
<wctype.h> |
宽字符分类和映射支持 |
IEEE POSIX
POSIX原本是由IEEE定义的标准簇,意思是可移植操作系统接口.
1003.1标准定义了满足POSIX
的系统必须提供的各种服务.它说明了一个接口而不是一种实现.
POSIX.1规定某些操作要求适当的优先权,但没有包含超级用户的概念.
POSIX.1指定的必选头文件
头文件 | 说明 |
---|---|
<aio.h> |
异步IO |
<cpio.h> |
cpio归档值 |
<dirent.h> |
目录项 |
<dlfcn.h> |
动态链接 |
<fcntl.h> |
文件控制 |
<fnmatch.h> |
文件名匹配类型 |
<glob.h> |
路径名模式匹配与生成 |
<grp.h> |
组文件 |
<iconv.h> |
代码集变换实用程序 |
<langinfo.h> |
语言信息常量 |
<monetary.h> |
货币类型与函数 |
<netdb.h> |
网络数据库操作 |
<nl_types.h> |
消息类 |
<poll.h> |
投票函数 |
<pthread.h> |
线程 |
<pwd.h> |
口令文件 |
<regex.h> |
正则表达式 |
<sched.h> |
执行调度 |
<semaphore.h> |
信号量 |
<strings.h> |
字符串操作 |
<tar.h> |
tar归档值 |
<termios.h> |
终端IO |
<unistd.h> |
符号常量 |
<wordexp> |
字扩充类型 |
<arpa/inet.h> |
因特网定义 |
<net/if.h> |
套接字本地接口 |
<netinet/in.h> |
因特网地址簇 |
<netinet/tcp.h> |
传输控制协议定义 |
<sys/mman.h> |
存储管理声明 |
<sys/select.h> |
select函数 |
<sys/socket.h> |
套接字接口 |
<sys/stat.h> |
文件状态 |
<sys/statvfs.h> |
文件系统信息 |
<sys/times.h> |
进程时间 |
<sys/types.h> |
基本系统数据类型 |
<sys/un.h> |
UNIX域套接字定义 |
<sys/utsname.h> |
系统名 |
<sys/wait.h> |
进程控制 |
XSI
POSIX.1中的X/POEN系统接口选项描述了可选的接口,叶定义了遵循XSI的实现必须支持POSIX.1的哪些可选部分.只有遵循XSI的实现才能称为UNIX系统.