单片机与嵌入式
51单片机的寻址方式
51单片机的汇编指令系统
51汇编语言的伪指令
51汇编语言程序结构与程序示例
Keil C51程序设计
Keil C51的库函数
PIC单片机的基本结构
PIC单片机的汇编语言指令
PIC单片机的C语言编程
ATmega16单片机基本结构
ATmega16单片机的汇编语言
ATmega128单片机的结构
STM32单片机基础
使用STM32CubeMX开发STM32单片机
uC/OS-II嵌入式操作系统
uC/OS-II在STM32F10xx上的移植
FreeRTOS系统介绍
Linux系统介绍
Linux系统编程
嵌入式Linux编程
1. Linux发展简介:
Linux内核最初是由芬兰人Linus Benedict Torvalds在赫尔辛基大学上学时编写的,1991年第一次发布Linux内核,随后采用GPL协议,以后越来越多的程序员加入Linux内核代码的编写和修改工作。目前Linux系统在服务器和超级计算机领域占据绝对主导地位,在手机、车载终端、智能电视等嵌入式设备上也占据很大市场。
Linux源于Unix系统,这是AT&T贝尔实验室的Ken Thompson和Dennis Ritchie于1971年在一台PDP-11/24上开发的。Ken在参与麻省理工、AT&T贝尔实验室和通用电气合作进行的用于GE-645大型机的操作系统Multics时编写了一个Space Travel游戏,但后来Multics项目失败,为了能使游戏运行,就在一台PDP-7上用汇编写了一个操作系统原型,目的是运行此游戏。这个操作系统因为使用汇编开发,在不同的计算机上难以移植,1973年,Ken Thompson和Dennis Ritchie用C语言重新编写了这个系统,并在相关领域引起兴趣,后来的第5版提供给各大学用来教学使用,此后各大学及公司通过对UNIX进行改进和扩展,使其流行起来。
1978年,加州大学伯克利分校推出改进的UNIX版本BSD,而AT&T则将UNIX商业化变成产品,从此形成UNIX两大分支。后来BSD的主要开发者之一的Bill Joy在BSD基础上开发了SunOS,后来还创办了Sun微系统公司。
因为UNIX为商业软件,价格昂贵,荷兰人Andrew S. Tanenbaum于1987年开发了主要用于学生学习操作系统的MINIX,免费使用。Linus Benedict Torvalds在大学学习时不满足MINIX的性能,就写了一个内核并在新闻组发布了消息,还将新的操作系统上传服务器,管理员为此系统以Linus的谐音取名Linux。
Linux有两种版本,一种是内核版本,一种是发行版本。内核是指提供硬件抽象层、磁盘文件系统、多任务管理等功能的系统软件,但并不完整,只有增加一些外围功能软件才是操作系统。一些组织或厂家将Linux内核与外围实用程序和文档包装起来,并提供系统安装界面和系统配置管理工具,构成发行版本软件包,常见的有RedHat、Ubuntu、Slackware、SUSE等。
Linux的发展过程的一些节点:
1991年2月,Linus初步编写的Linux功能就是两个进程分别显示AAA和BBB。
1991年9月,Linus发布的Linux 0.01版本代码量约10000行。
1993年,参与编写修改Linux内核代码的程序员扩大到100人,核心组5人。
1994年3月发布的Linux 1.0,代码量达到17万行。
1995年,Linux已经可以运行在Intel、Sun SPARC等处理器上,用户量超50万。
1996年,Linux 2.0内核发布,代码量达40万行,全球用户350万。
2. Shell与shell命令:
Linux系统的shell作为操作系统的外壳,为用户提供使用操作系统的接口。Shell是一个命令语言解释器,它拥有内建的shell命令集,也能被系统中的其他应用程序调用。用户登录成功后,系统将执行一个名为shell 的程序,shell进程提供了命令行提示符,对普通用户使用$为提示符,对超级用户用#为提示符。
用户在提示符下输入的命令都由shell先解释,然后传给Linux核心,其中一些命令是包含在shell内部的,还有一些命令是存在于文件系统中某个目录下的单独程序。Shell首先检查是否内部命令,若不是再检查是否是一个应用程序。如果键入的命令不是一个内部命令,并且在路径中也没有找到可执行文件,就会显示一条错误信息;如果能够成功找到命令,内部命令或应用程序,将分解为系统调用并传给Linux内核。
如果一条命令花费了很长时间来运行,或者在屏幕上产生了大量输出,可以从键盘上按Ctrt+C发出中断信号来中止执行。
Linux默认的shell是Bourne Again Shell,简称Bash。在登录到系统时,由/etc/passwd文件来决定要使用哪个shell。用户使用的shell是在用户主目录下的.bash_profile文件中定义,Bash每次启动都将读取该文件,设置相关环境变量。
1) Shell命令行及参数:
Shell命令行格式:
命令 [选项] 参数
选项是包括一个或多个字母的代码,前面要有减号,用于改变命令执行的动作的类型。
在一个命令行可以输入多条命令,使用分号隔开。如果命令行比较长,可以使用反斜杠将一个命令持续到下一行。
⑴ 命令补齐:
输入命令时,如果名字较长而记不清后面字符,可以按Tab键,系统会查找当前目录下的文件名并自动补齐或给出选择。键入Esc?组合键也能列出匹配文件名供选择。
⑵ 命令行编辑:
Shell命令行实际上是一个可以编辑的文本缓冲区,在按Enter键之前,可以对输入的文本进行编辑,可以利用Backspace键删除刚键入的字符,可以进行整行删除,还可以插入字符。
Ctrl+B或左箭头 | 左移一个字符 |
---|---|
Ctrl+F或右箭头 | 右移一个字符 |
Ctrl+A | 移至行首 |
Ctrl+E | 移至行尾 |
Esc B | 左移一个单词 |
Esc F | 右移一个单词 |
Del | 删除光标所在处字符 |
Ctrl+D | 删除光标所在处字符 |
Backspace或Ctrl+H | 删除光标左边的字符 |
Ctrl+K | 删除至行尾 |
Bash保存着以前键入过的命令列表,history命令能够查看最近执行的命令。利用上箭头可以重新显示刚执行的命令,并可以逐次显示各条命令,下箭头则使命令列表向下移动。
系统保存的历史命令数保存在变量HISTSIZE中,默认值为1000,通过echo $HISTSIZE可以查看设置值,通过HISTSIZE=500可以改变值为500。
而历史命令则保存在文件中,文件名由变量HISTFILE指定,默认为.bash_history,通过给变量HISTFILE赋值,可以指定其他文件名。通过 echo $HISTFILE可以查看文件名,通过HISTFILE="/home/newlist"赋予新值。
⑷ 命令别名:
使用恰当的命令别名可以减少键盘输入,命令格式:
alias [alias-name='original-command']
其中,alias-name为用户起的别名,original-command是原来的命令和参数。在命令中包含空格等字符时,需要使用引号,而且等号两边也不能有空格,不然shell会解析错误。
为了使别名在每次登录都有效,就需要将alias命令写到初始化脚本文件中。
2) Shell的特殊字符:
Shell中可以使用一些具有特殊含义和功能的特殊字符。
⑴ 通配符:
通配符用于模式匹配,如文件名匹配、路径名搜索、字符串查找等。常用的通配符有*、?和方括号[]中的字符序列。用户可以在作为命令参数的文件名中包含这些通配符,构成模式串,在执行过程中进行模式匹配。
“*”:代表任意长度的任何字符,但文件或路径名中的圆点和斜线必须显式匹配
“?”:代表任何单个字符
“[]”:代表一个指定的字符范围
方括号中的字符范围可以直接由给出的字符组成,也可以由表示限定范围的起始字符、终止字符及中间的连字符“-”组成。连字符仅在方括号内有效,而*和?只在方括号外为通配符。
⑵ 引号:
引号有三种,单引号、双引号和反引号。
由单引号括起来的字符都作为普通字符,特殊字符用单引号括起来后只作普通字符。
由双引号括起来的字符,除$、单引号、双引号外都是普通字符。对$,用其后指定的变量值来代替这个变量和$;反斜线是转义字符,使shell不对其后的字符进行特殊处理,只作为普通字符。
反引号对应键盘左上角,其括起来的字符串被shell解释为命令行,执行时首先执行该命令行,并以其标准输出的结果取代整个反引号部分。利用反引号的这种功能可以进行命令置换,即把反引号括起来的执行结果赋值给指定变量。如:
# today=`date`
# echo Today is $today
反引号还可以嵌套使用,但嵌套时,内层的反引号必须用反斜线将其转义:
# abc=`echo the number of users is\`who|wc -l\``
# echo $abc
在反引号之间的命令行也可以使用shell特殊字符。
# TestString=”`echo $HOME ` `ls h*`”
# echo $TestString
⑶ 注释符:
以#开头的正文行表示注释行。
3) 标准输入/输出和重定向:
执行shell时,通常会打开3个标准文件,标准输入文件stdin,通常对应终端的键盘;标准输出文件stdout和标准错误输出文件stderr,通常对应终端的屏幕。进程将从标准输入文件得到输入数据,将正常输出的数据输出到标准输出文件,而将错误信息送到标准错误文件。
⑴ 输入重定向:
是指把命令的标准输入重定向到指定的文件,也就是输入可以不来自键盘,而来自一个文件。
输入重定向使用小于号字符,放与命令后面:
命令<文件名
另一种是使用双小于号,使用一对分隔符,可以使用多行,其间的正文重定向到输入。示例:
# wc<<qq
> This is a
> here document test
> qq
双小于号后面紧跟的字符串作为分隔符,一直延续到另一个分隔符出现为止,而第二个分隔符必须出现在新行的行首。
⑵ 输出重定向:
是指把命令的标准输出或标准错误重定向到指定文件,这样输出就不在屏幕上显式,而是写入指定的文件中。输出重定向比较常用,使用大于号放于命令后。
命令>文件名
重定向指向的文件如果已经存在,其内容会被覆盖。也可以使用一种追加式输出重定向,使输出结果追加到指定文件的最后,使用双大于号。
命令>>文件名
如果要对标准错误输出重定向,使用2>,追加方式则使用2>>。
还有一种是将标准输出和标准错误同时重定向到一个文件中,使用&>。
⑶ 管道:
将一个命令或程序的输出作为另一个命令或程序的输入,可以不借助临时文件而使用管道功能。使用管道可以把一系列命令连接起来,输出最后一个命令的结果。管道使用|符号。
#ls /usr/bin|wc -w
4) 命令替换:
将一个命令的输出作为另外一个命令的参数,使用反引号。
命令1 `命令2`
3. Linux常用shell命令:
1) 用户和用户组命令:
useradd [option] username |
新建用户账号,超级用户命令 |
-c fullname 指定用户全称 -d maindir 指定用户主目录 -g groupID 指定用户主要组 -G groupID 指定用户附加组 -s shell 指定用户登录后启动shell类型 -u userID 指定用户id |
# useradd NewUser
当不用任何选项时,Linux系统将按照默认值新建用户,在/home目录新建与用户同名的子目录为该用户主目录,并还将新建一个与用户同名的组作为该用户主要组,该用户shell用Bash,UID由系统决定。
使用useradd新建用户账号,将在/etc/passwd文件和/etc/shadow文件中增加用户的记录,如果新建了组名,将在/etc/group文件和/etc/gshafow文件中增加记录。
passwd [-dkls] [-u <-f>] [username] |
设置密码 |
-d username 删除密码,超级用户命令 -k username 只能在密码过期失效后设置 -l username 锁住密码 -s username 列出密码相关信息,超级用户命令 -u username 解开上锁的账号 -f username 强制执行 |
# passwd NewUser
此命令让用户可以更改自己的密码,而超级用户通过指定用户名能用来管理用户密码。
userdel [-r] username |
删除指定的用户账号,超级用户命令 |
-r username 系统不仅删除此用户账号,并且还将用户的主目录一并删除,不用r选项则只删除账号 |
# userdel -r User
如果新建用户时创建了同名的组,而该组当时没有其他用户,那么在删除用户的同时也将删除这个组。正在使用系统的用户不能被删除,只有终止该用户所有进程后才能删除。
groupadd [option] groupID |
新建组,超级用户命令 |
-g groupID 指定新建组的ID |
# groupadd NewUsers
利用此命令新建组时,如果不指定groupID,由系统指定。执行时将在/etc/group文件和/etc/gshadow文件中增加一行记录。
groupdel groupID |
删除指定的组,超级用户命令 |
# groupdel NewUsers
删除指定组之前,必须保证该组群不是任何用户的主要组,否则需要首先删除那些以此组为主要组的用户,才能删除该组。
其他还有:
· uname:当前系统相关信息
· hostname:用以显示或设置系统的主机名称
· date:显示或设置系统时间与日期
· cal:显示日历
· uptime:打印系统总计运行了多长时间和系统的平均负载
· dmesg:显示开机信息
· top:显示当前系统状态信息
· who:显示登录到系统的所有用户
· whoami:显示当前用户
· last:显示近期登录用户的信息
· usermod:修改用户账号基本信息
· id:显示用户ID、组ID和所属组列表
· ifconfig:显示或设置网络设备
· ping:测试主机之间网络的连通性
· netstat:用于显示状态信息
2) 文件和目录命令:
mkdir [option] dir |
创建目录 |
-m 访问权限 设置目录的权限 -p 目录树 一次创建多级目录 |
$ mkdir -p directory/list
mv [option] source object |
移动或重命名文件或目录 |
-b 若存在同名文件,则覆盖之前先备份原来的文件 -f 强制覆盖同名文件 |
$ mv neu neusoft
$ mv neu ../
cp [option] source object |
复制文件或目录 |
-b 若存在同名文件,则覆盖之前先备份原来的文件 -f 强制覆盖同名文件 -r 按递归方式,保留原目录结构复制 |
$ cp -b neu neusoft
rm [option] file/dir |
删除文件或目录 |
-f 强制删除,不出现确认信息 -r 按递归方式删除目录 |
$ rm -rf directory
chmod [mod] file |
修改文件访问权限 |
mod 包括数字形式的模式0~7和功能描述权限的选项 |
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
--- | --x | -w- | -wx | r-- | r-x | rw- | rwx |
无 | 可执行 | 可写 | 可写可执行 | 可读 | 可读可执行 | 可读可写 | 可读可写可执行 |
对象 | 操作符 | 权限 | ||||||
u | g | o | + | - | = | r | w | x |
文件所有者 | 同组用户 | 其他用户 | 增加权限 | 删除权限 | 赋予给定权限 | 读取权限 | 写入权限 | 执行权限 |
$ chmod g-w test
chgrp group file |
修改文件所属组 |
$ chgrp NewUsers test
chown owner[.gID] file |
改变文件所有者,也可以一并修改所属组 |
$ chown NewUser test
其他还有:
· ls:显示当前路径下的内容
· rmdir:删除目录
· touch:创建文件或更新文件修改时间
· mv:重命名或移动文件
· wc:显示行数、单词数和字节数
· find:查找文件
· file:显示文件类别
· du:显示文件占用磁盘信息
· grep:查找字符串
3) 进程命令:
ps [option] |
显示进程的状态,无选项时显示当前终端启动的进程 |
-a 显示当前终端上所有进程,包括其他用户的进程 -e 显示系统中所有进程,包括其他用户进程和系统进程 -l 显示进程的详细信息,包括父进程号、优先级等 u显示进程的信息信息,包括CPU和内存使用率 X 显示后台进程 -t terminal 显示指定终端上的进程信息 |
$ ps u
kill [option] pid kill % proc |
终止正在进行的进程或作业,超级用户可终止所有进程,普通用户只能终止自己启动的进程 |
-9 当无选项的kill命令不能终止进程时,可强行终止指定进程 |
$ kill 2682
4) 压缩打包命令:
· tar:打包备份文件· bzip2:bz2文件格式压缩或解压
· bunzip2:bz2文件格式解压
· bzip2recover:修复损坏的bz2文件格式
· gzip:gz文件格式压缩
· gunzip:gz文件格式解压
· unzip:zip文件格式解压
· compress:早期的压缩解压
5) 其他一些命令:
· clear:清屏· cat:显示文本文件内容
· mount:挂载
6) 获取帮助信息:
Linux系统在安装过程中可以选择安装联机帮助手册,可以使用man命令来显示联机帮助手册的条目。手册共有8个常见章节:章节号 | 内容 |
---|---|
1 | 用户命令(env、ls、echo、mkdir、tty) |
2 | 系统调用或内核函数(link、sethostname、mkdir) |
3 | 库函数(acosh、asctime、btree、locale) |
4 | 与设备相关的信息(isdn_audio、mouse、tty、zero) |
5 | 文件格式描述(keymaps、motd、wvdial.conf) |
6 | 游戏(许多游戏是图形化的) |
7 | 杂项(arp、boot、regex、unix utf8) |
8 | 系统管理(debugfs、fdisk、fsck、mount、renice、rpm) |
Man [-adfhktw W][-section][-M path][-P pager][-S list][-m system][-p string]title...... |
-a 显示所有匹配项 -d 显示man查找手册文件时的搜索路径信息,不显示手册页面内容 -f 同命令whatis,将在whatis数据库查找以关键字开始的帮助索引信息 -h 显示帮助信息 -k 同命令apropos,将搜索whatis数据库,模糊查找关键字 -t 使用troff命令格式化输出手册页面,默认groff输出格式页面 -w|-W 如果不带title参数,则打印MANPATH变量;如果带title参数,则打印找到的title所在的手册文件路径,默认搜索一个文件后停止 -section 指定某个段内搜索相关条目,如果省略,则搜索所有的手册段。section取值可以为1~8,来指明要查看的帮助信息。 -M path 指定搜索手册的路径 -P pager 使用程序pager显示手册页面,默认是/usr/bin/less -S list 指定搜索的领域及顺序,如man 3:1 prinft,将先搜索man的第3章节,如果没搜到,再搜索man的第1章节 -m system 依所指定的system名称而指定另一组的联机帮助手册 -p string 指定通过groff格式化手册之前,先通过其他程序格式化手册 |
$ man -w passwd
$ man -aw passwd
$ man 1 passwd
4. Linux主要的系统调用:
1) 进程控制:
*fork | 创建一个新进程 | prctl | 对进程进行特定操作 |
---|---|---|---|
clone | 按指定条件创建子进程 | ptrace | 进程跟踪 |
*execve | 运行可执行文件 | sched_get_priority_max | 取得静态优先级的上限 |
*exit | 中止进程 | sched_get_priority_min | 取得静态优先级的下限 |
*_exit | 立即中止当前进程 | sched_getparam | 取得进程的调度参数 |
getdtablesize | 进程所能打开的最大文件数 | sched_getscheduler | 取得指定进程的调度策略 |
getpgid | 获取指定进程组标识号 | sched_rr_get_interval | 取得按RR算法调度的实时进程的时间片长度 |
setpgid | 设置指定进程组标志号 | sched_setparam | 设置进程的调度参数 |
getpgrd | 获取当前进程组标识号 | sched_setscheduler | 设置指定进程的调度策略和参数 |
setpgrd | 设置当前进程组标志号 | sched_yield | 进程主动让出处理器,并将等候调度队列队尾 |
*getpid | 获取进程标识号 | *vfork | 创建一个子进程,以供执行新程序,常与execve等同时使用 |
*getppid | 获取父进程标识号 | *wait | 等待子进程终止 |
getpriority | 获取调度优先级 | wait3 | 参见wait |
setpriority | 设置调度优先级 | *waitpid | 等待指定子进程终止 |
modify_ldt | 读写进程的本地描述表 | wait4 | 参见waitpid |
nanosleep | 使进程睡眠指定的时间 | capget | 获取进程权限 |
nice | 改变分时进程的优先级 | capset | 设置进程权限 |
*pause | 挂起进程,等待信号 | getsid | 获取会话标识号 |
personality | 设置进程运行域 | setsid | 设置会话标识号 |
2) 文件操作:
fcntl | 文件控制 | *lseek | 移动文件指针 |
---|---|---|---|
*open | 打开文件 | _llseek | 在64位地址空间里移动文件指针 |
*creat | 创建新文件 | *dup | 复制已打开的文件描述符 |
*close | 关闭文件描述符 | *dup2 | 按指定条件复制文件描述符 |
*read | 读文件 | flock | 文件加/解锁 |
*write | 写文件 | poll | I/O多路转换 |
readv | 从文件读入数据到缓冲数组中 | *truncate | 截短文件 |
writev | 将缓冲数组里的数据写入文件 | *ftruncate | 参见truncate |
pread | 对文件随机读 | *umask | 设置文件权限掩码 |
pwrite | 对文件随机写 | *fsync | 把文件在内存中的部分写回硬盘 |
3) 文件系统操作:
access | 确定文件的可存取性 | getdents | 读取目录项 |
---|---|---|---|
*chdir | 改变当前工作目录 | *mkdir | 创建目录 |
*fchdir | 参见cddir | mknod | 创建索引节点 |
*chmod | 改变文件方式 | *rmdir | 删除目录 |
*fchmon | 参见chmod | *rename | 文件改名 |
*chown | 改变文件的所有者或所属组 | *link | 创建链接 |
*fchown | 参见chown | *symlink | 创建符号链接 |
*lchown | 参见chown | *unlink | 删除链接 |
chroot | 改变根目录 | *readlink | 读符号链接的值 |
*stat | 取文件状态信息 | mount | 安装文件系统 |
*lstat | 参见stat | umount | 卸载文件系统 |
*fstat | 参见stat | ustat | 取文件系统信息 |
statfs | 取文件系统信息 | *utime | 改变文件的访问修改时间 |
fstatfs | 参见statfs | utimes | 参见utime |
*readdir | 读取目录项 | quotactl | 控制磁盘配额 |
4) 系统控制:
ioctl | I/O总控制 | *alarm | 设置进程的闹钟 |
---|---|---|---|
_sysctl | 读写系统参数 | getitimer | 获取计时器值 |
acct | 启用或禁止进程记账 | setitimer | 设置计时器值 |
getrlimit | 获取系统资源上限 | gettimeofday | 取时间和时区 |
settrlimit | 设置系统资源上限 | settimeofday | 设置时间和时区 |
gettrusage | 获取系统资源使用情况 | *stime | 设置系统日期和时间 |
uselib | 选择要使用的二进制函数库 | *time | 取得系统时间 |
ioperm | 设置端口I/O权限 | times | 取得进程运行时间 |
iopl | 改变进程I/O权限级别 | uname | 获取当前UNIX系统的名称、版本和主机等信息 |
outb | 低级端口操作 | vhangup | 挂起当前终端 |
reboot | 重新启动 | nfsservctl | 对NFS守护进程进行控制 |
swapon | 打开交换文件和设备 | vm86 | 进入模拟8086模式 |
swapoff | 关闭交换文件和设备 | create_module | 创建可装载的模块项 |
bdflush | 控制bdflush守护进程 | delete_module | 删除可装载的模块项 |
sysfs | 取核心支持的文件系统类型 | init_module | 初始化模块 |
sysinfo | 取得系统信息 | query_module | 查询模块信息 |
adjtimex | 调整系统时钟 | *get_kernel_syms | 取得核心符号,已被query_module替代 |
5) 内存管理:
brk | 改变数据段空间的分配 | munmap | 去除内存页映射 |
---|---|---|---|
sbrk | 参见brk | mremap | 重新映射虚拟内存地址 |
mlock | 内存页面加锁 | msync | 将映射内存中的数据写回磁盘 |
munlock | 内存页面解锁 | mprotect | 设置内存映像保护 |
mlockall | 调用进程所有内存页面加锁 | getpagesize | 获取页面大小 |
munlockall | 调用进程所有内存页面解锁 | *sync | 将内存缓冲区数据写回硬盘 |
mmap | 映射虚拟内存页 | cacheflush | 将指定缓冲区中的内容写回磁盘 |
6) 网络管理:
getdomainname | 取域名 | sethostid | 设置主机标识号 |
---|---|---|---|
setdomainname | 设置域名 | *gethostname | 获取本主机名称 |
gethostid | 获取主机标识号 | sethostname | 设置主机名称 |
7) socket控制:
socketcall | socket系统调用 | *recvmsg | 参见recv |
---|---|---|---|
*socket | 建立socket | *listen | 监听socket端口 |
*bind | 绑定socket到端口 | select | 对多路同步I/O进行轮询 |
*connect | 连接远程主机 | *shutdown | 关闭socket上的连接 |
*accept | 响应socket连接请求 | getsockname | 取得本地socket名字 |
*send | 通过socket发送信息 | gerpeername | 获取通信对方的socket名字 |
*sendto | 发送UDP信息 | getsockopt | 取端口设置 |
*sendmsg | 参见send | setsockopt | 设置端口参数 |
*recv | 通过socket接收信息 | sendfile | 在文件或端口间传输数据 |
*recvfrom | 接收UDP信息 | socketpair | 创建一对已连接的无名socket |
8) 用户管理:
*getuid | 获取用户标识号 | setreuid | 分别设置真实和有效的用户标识号 |
---|---|---|---|
setuid | 设置用户标识号 | getresgid | 分别获取真实的、有效的和保存过的组标识号 |
*getgid | 获取组标识号 | setresgid | 分别设置真实的、有效的和保存过的组标识号 |
setgid | 设置组标识号 | getresuid | 分别获取真实的、有效的和保存过的用户标识号 |
*getegid | 获取有效组标识号 | setresuid | 分别设置真实的、有效的和保存过的用户标识号 |
setegid | 设置有效组标识号 | setfsgid | 设置文件系统检查时使用的组标识号 |
*geteuid | 获取有效用户标识号 | setfsuid | 设置文件系统检查时使用的用户标识号 |
seteuid | 设置有效用户标识号 | getgroups | 获取后补组标识清单 |
setregid | 分别设置真实和有效的组标识号 | setgroups | 设置后补组标识清单 |
9) 进程间通信:
ipc | 进程间通信总控制调用 | ssetmask | ANSI C的信号处理函数,作用类似sigaction |
---|---|---|---|
*sigaction | 设置对指定信号的处理方法 | msgctl | 消息控制操作 |
sigprocmask | 根据参数对信号集中的信号执行阻塞/解除阻塞等操作 | msgget | 获取消息队列 |
sigpending | 为指定的被阻塞信号设置队列 | msgsnd | 发消息 |
sigsuspend | 挂起进程等待特定信号 | msgrcv | 取消息 |
*signal | 设置对指定信号的处理方法 | pipe | 创建管理 |
*kill | 向进程或进程组发信号 | semctl | 信号量控制 |
sigblock | 向被阻塞信号掩码中添加信号,已被sigprocmask替代 | semget | 获取一组信号量 |
siggetmask | 取得现有阻塞信号掩码,已被sigprocmask替代 | semop | 信号量操作 |
sigsetmask | 用给定信号掩码替换现有阻塞信号掩码,已被sigprocmask替代 | shmctl | 控制共享内存 |
sigmask | 将给定的信号转化为掩码,已被sigprocmask替代 | shmget | 获取共享内存 |
sigpause | 作用同sigsuspend,已被sigsuspend替代 | shmat | 连接共享内存 |
sigvec | 为兼容BSD而设的信号处理函数,作用类似sigaction | shmdt | 拆卸共享内存 |