最牛的视频网站建设,网站建设与设计的论文,丹阳做网站的,wordpress 图片缩略图不显示图片1.1 登录
1.1 登录名 登录Unix系统时#xff0c;要先输入登录名#xff0c;然后再输入口令。系统再其口令文件#xff08;/etc/password文件#xff09;查看登录名。口令文件中的登录项由7个以冒号分隔的字段组成#xff1a;登录名#xff0c;加密口令#xff0c;数字用…1.1 登录
1.1 登录名 登录Unix系统时要先输入登录名然后再输入口令。系统再其口令文件/etc/password文件查看登录名。口令文件中的登录项由7个以冒号分隔的字段组成登录名加密口令数字用户ID224注释字段起始目录/home/username以及shell程序/bin/ksh。
1.1.1 shell shell是一个命令行解析器它用于读取用户输入然后执行命令用户通常用终端有时则通过文件shell脚本向shell进行输入。常用的shell有
1Bourne shell, /bin/sh
2C shell, /bin/csh
3KornShell, /bin/ksh
1.2 文件和目录
1.2.1 文件系统 Unix文件系统是目录和文件的一种层次安排目录的起点称为根root其名字是一个字符/。目录directory是一个包含目录项的文件在逻辑上可以认为每个目录项都包含一个文件名同时还包含说明该文件属性的信息。文件属性是文件类型文件长度文件所有这文件的许可权。
1.2.2 文件名 目录中的各个名字成为文件名filename。文件名不能出现斜线/和空操作符null。斜线分隔构成路径名空操作符则终止一个路径名。 当创建一个新目录时自动创建了2个文件.和.. 。点表示引用当前目录点点表示引用父目录在最高层次的根目录中点和点点相同。
1.2.3 路径名 0个或多个以斜线分隔的文件名序列构成路径名pathname以斜线开头的路径名称称为绝对路径名absolute pathname否则称为相对路径名relative pathname。
1.2.4 工作目录 每个进程都有一个工作目录working directory。所有相对路径都从工作目录开始解释。进程可以有chdir更改其工作目录。
1.2.5 起始目录 登录时工作目录设置为起始目录home directory该起始目录从口令文件的登录项中获取。
1.3 输入和输出
1.3.1 文件描述符 文件描述符是一个小的非负整数内核用以标识一个特定进程正在访存的文件。当内核打开一个现存文件或创建一个新文件时它就返回一个文件描述符。
1.3.2 标准输入、标准输出和标准出错 每当运行一个新程序时所有的shell都为它打开三个文件描述符标准输入、标准输出及标准出错。如果像简单ls那样没有做什么特殊处理则这三个描述符都连向终端。大多数shell都提供一种方法使任何一个或所有这三个描述符都能重新定向到某个文件如
ls file.list
执行ls命令其标准输出重新定向到file.list文件中
1.3.3 不用缓存的I/O 函数open、read、write、lseek以及close提供了不用缓存的I / O。这些函数都用文件描述符 进行工作。
1.3.4 标准I/O 标准I/O函数提供一种对不用缓存的I/O函数的带缓存的界面。使用标准I/ O可无需担心如何 选取最佳的缓存长度。另一个使用标准 I/O函数的优点与处 理输入行有关。例如fgets函数读一完整的行而另一方面read函数读指定字节数。我们最熟悉的标准I/O函数是printf。
1.4 程序与进程
1.4.1 程序 程序program是存放在磁盘文件中的可执行文件。使用 6个exec函数中的一个由内核将 程序读入存储器并使其执行。
1.4.2 进程与进程ID 程序的执行实例被称为进程process。每个进程都一定有一个唯一的数字标识符称为进程 IDprocess ID。进程ID总是 一非负整数。
1.4.3 进程控制 有三个用于进程控制的主要函数 fork、exec和waitpidexec函数有六种变体但经常把 它们统称为exec函数。
1.5 出错管理 当函数出错时往常返回一个负值而且整型变量errno通常设置为具有特定信息的一个值。 C标准定义了两个函数它们帮助打印出错信息。
//此函数将errnum(它通常就是errno值) 映射为一个出错信息字符串并且返回此字符串的指针。
#include string.h
char *strerror(int errnum) ;//perror函数在标准出错上产生一条出错消息(基于errno的当前值)然后返回。
#include stdio.h
//它首先输出由msg指向的字符串然后是一个冒号一个空格然后是对应于 errno值的出
//错信息然后是一个新行符。
void perror(const char * msg)
两个出错函数的使用方法
#include stdio.h
#include string.h
#include unistd.h
#include errno.hint main(int argc, char* argv)
{fprintf(stderr, EACESS:%s\n, strerror(EACESS));errno ENOENT;perror(argv[0]);exit(0);
}
如果此程序经编译结果送入文件a.out则有
$ a.out
EACCES: Permission denied
a.out: No such file or directory
1.6 用户标识
1.6.1 用户ID 口令文件登录项中的用户IDuser ID是个数值它向系统标识各个不同的用户。系统管理员 在确定一个用户的登录名的同时确定其用户ID。用户不能更改其用户ID。通常每个用户有一个唯一的用户ID。 用户ID为0的用户为根( root )或超级用户( superuser )。在口令文件中通常有一个登录项 其登录名为root我们称这种用户的特权为超级用户特权。如果一个 进程具有超级用户特权则大多数文件许可权检查都不再进行。某些操作系统功能只限于向超级用户提供超级用户对系统有自由的支配权。
1.6.2 组ID 口令文件登录项也包括用户的组IDgroup ID它也是一个数值。组ID也是由系统管理员在确定用户登录名时分配的。一般来说在口令文件中有多个记录项具有相同的组ID。在 U N I X下组被用于将若干用户集合到课题或部门中去。这种机制允许同组的各个成员之间共享资源(例如文件)。可以设置文件的许可权使组内所有成员都能存取该文件而组外用户则不能。 组文件将组名映射为数字组ID它通常是/etc/group。 系统中每个文件的目录项包含该文件所有者的用户ID和组ID。在目录项中存放这两个值只需4个字节(假定每个都以双字节的整型值存放)。如果使用8字节的登录名和8字节的组名则需较多的磁盘空间。但是对于用户而言使用名字比使用数值方便所以口令文件包含了登录名和用户ID之间的映射关系而组文件则包含了组名和组ID之间的映射关系。
1.7 信号 信息是通知进程已发生某种条件的一种技术。例如若某一进程执行除法操作其除数为 0则将名为SIGFPE的信号发送给该进程。进程如何处理信号有三种选择
(1) 忽略该信号。有些信号表示硬件异常例如除以0或访问进程地址空间以外的单元等因为这些异常产生的后果不确定所以不推荐使用这种处理方式。
(2) 按系统默认方式处理。对于0除系统默认方式是终止该进程。
(3) 提供一个函数信号发生时则调用该函数。使用这种方式我们将能知道什么时候产生了信号并按所希望的方式处理它。 很多条件会产生信号。有两种键盘方式分别称为中断键 (interrupt key通常是Delete键或Ctrl - C)和退出键(quit key通常是Ctrl - \ )它们被用于中断当前运行进程。另一种产生信号的方法是调用名为kill的函数。在一个进程中调用此函数就可向另一个进程发送一个信号。这样做也有些限制当向一个进程发送信号时我们必需是该进程的所有者。