APUE3学习笔记-第一章-UNIX基础知识

——上善若水,大道至简

UNIX体系结构

UNIX体系结构


登录

在/etc/passwd中查看登录名
文件中7个字段依次是:
登录名、登录口令、数字用户ID、数字组ID、注释字段、起始目录、shell程序
root:x:0:0:root:/root:/bin/bash

shell

shell

用户登录后,系统通常先显示一些系统信息,然后用户就可以向shell程序键入命令。
shell是一个命令行解释器,它读取用户输入,然后执行命令。

文件和目录

UNIX文件系统是目录和文件 的一种层次结构。
所有东西的起点成文根目录,根目录:“/”。
.(称为点),..(称为点点),点指向当前目录,点点指向父目录,
在最高层次的根目录中,点与点点相同。
绝对路径以根目录开头,相对路径以当前目录开头。
当前工作目录指进程的工作目录。
起始目录为登录时的工作目录。
ls命令查看目录下的所有文件的名字。

输入和输出

当内核打开一个现有文件或创建一个新文件时,都会返回一个文件描述符。
文件描述符通常是一个小的非负整数,在读、写文件时,可以使用该描述符。
当运行一个新程序时,shell会为其打开3个文件描述符,
即标准输入、标准输出、标准错误,通常这3个描述符链接向终端。
标准输入重定向: <
标准输出重定向: >

程序和进程

程序是一个可执行文件,内核使用exec函数将程序读入内存,并执行程序。
程序的执行实例称为进程。
每个进程都有唯一的数字标识符,称为进程ID。
进程控制的主要函数:forkexecwaitpid。
一个进程只有一个控制线程,

出错处理

文件<errno.h>中定义了大约15中不同的errno值,当系统函数出错时,<errno.h>
stderror(int errnum)可以将errnum(通常就是errno的值)映射为一个出错消息字符串,并返回字符串的指针。
通过perror(const char *msg)基于当前的errno值产生一条出错消息,
它首先输出msg指向的字符串,然后是一个冒号一个空格,接着是对应的出错消息。

用户标识

口令文件登录项中的用户ID和组ID,用于系统管理员管理登录用户的权限。
每一个用户有一个唯一的用户ID,内核通过检验用户ID确定该用户是否有执行某些操作的权限。
每个用户可以有多个组ID,组被用于将若干用户集合到项目中去,允许组内成员共享资源(如访问文件)。
组文件/etc/group。
调用getuid(),getgid()可以分别返回用户ID和组ID。

信号


信号用于通知进程发生了某种情况。
处理信号的三种方式:1.忽略信号 2。默认方式处理 3.提供处理函数,信号发生时调用。
捕捉信号使用signal函数,如下:
static void sig_int(int signo)
{
    printf("this is a signal\n%% ");
}

int main(void)
{
    if(signal(SIGINT, sig_int) == SIG_ERR)
        err_sys("signal error");

    ……

}

当产生SIGINT信号时调用sig_int。


时间值


日历时间为自UTC1970年1月1日 00:00:00以来的秒数积累值。
数据类型 time_t 用于保存这种时间值。
UNIX为一个进程维护了3个进程时间值:
时钟时间、用户CPU时间、系统CPU时间

系统调用和库函数

内核的直接入口点称为系统调用。
库函数调用了一个或多个系统调用,不是内核入口点。
应用程序既可以调用系统调用也可以调用库函数。


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值