Linux系统编程手册一 :Linux系统基本概念。

来源:互联网 发布:unity3d简介 编辑:程序博客网 时间:2024/06/06 20:55

1.hard link与soft link :
hard link:硬链接,也叫正式链接,普通链接,文件名对应的是i-node节点,所以一个node节点可以对应多个文件名,删除一个,ref_count –,当减为0的时候,就彻底删除。
要注意,hard link不能对目录建立连接,必须对同一个文件系统的文件建立hard link.
soft link :软链接,符号链接, 其实就是一个文件,只不过这个文件的内容是另一个文件的路径名。可以对目录和其他文件系统的文件建立soft link。所以删除soft link对源文件一点影响都没有,也就是源文件不知道被soft link了。多数情况下,内核会自动解引用,如果指向的文件不存在,这就是一个空链接。
2.文件结束符 :unix系统没有文件结束符的概念,读取文件时没有数据返回,就会认定抵达文件末尾。
3.系统调用IO和stdio函数库的IO函数的的区别: unix系统I/O模型最为显著的特性之一就是I/O模型的通用性,不仅仅对应于文件,设备驱动也是用同样的(open(), read(), write(), close()等)。对于磁盘等设备,可以调用lseek()来随机访问。
另外stdio库对系统IO封装了一套IO函数,就是fopen(), fclose(), scanf(), printf(), fgets(), fputs()等。
IO系统的文件描述符fd,是一个非负整数,用来指带打开的文件。其中,由shell启动的进程通常会继承3个已经打开的fd,就是0(stdin),1(stdout),2(stderr).
4进程 :进程可以调用系统调用fork()来创建进程(pid),新创建的进程就是子进程,调用fork的进程就是父进程(ppid)。内核通过对父进程的复制来创建子进程。子进程可以调用execve()系统调用取加载并执行一个全新的程序,execve会销毁现在的文本段,数据段,栈段及堆段,并根据新程序的代码来生成新的段。
系统引导启动时,内核会创建一个init进程,这是所有进程的父进程。
5.环境列表: 每个进程都有一个环境列表, 即在进程用户空间中保存了一组环境变量,当fork创建进程时,子进程会继承父进程的环境变量,这也算是一种进程间通信。当进程调用exec函数替换当前正在运行的程序时,要么继承老程序的环境,要么在exec调用的参数中指定新环境并加以接收。
在shell中一般可以用export来声明环境变量 export NAME=ccjing
在shell中, ulimit命令可以修改资源的限制。
6.静态库和共享库
静态库:静态库是对已编译目标模块的结构化整合,要使用静态库中的函数,需要在编译链接的时候指定相应的库。主程序会对静态库中隶属与各目标模块中的函数加以引用,链接器在解析了引用情况后,会从库中抽取相应的模块,将其复制到最终的可执行文件中。这就是所谓的静态链接。
缺点:由于将所需要的模块都复制到可执行文件中,所以就造成了多份拷贝,占用内存空间。另外,如果库有更新,不仅仅需要重新编译静态库,还需要重新对所有用到这个库的主程序重新链接该库。
共享库: 也叫动态库,专门为了解决 静态库的缺点。将链接到共享库的时候,链接器不会把该库复制到可执行文件中,只是在可执行文件中加入了一条记录。一旦在运行时将可执行文件载入内存,动态链接器会确保将可执行文件的动态库找到,并载入内存,随后实施运行时链接,解析可执行文件中的函数调用,将其与共享库的函数定义关联起来,在运行时,在内存中只保留了一份。如果共享库有更新,只需要编译共享库,不需要对可执行文件做修改。可执行文件会自动链接最新的库。

内存映射
系统函数mmap()可以在其虚拟空间中创建出一个新的内存映射。映射主要分为两类:
1.文件映射:将文件的部分区域映射到虚拟内存,一旦映射完成,对文件该部分的访问就转化为对相应内存区域的访问。映射页面会自动按需从文件加载。
2.无文件与之对应的匿名映射: 其映射页面的内容会自动初始化为0。
由某一进程创建的映射可以和其他进程共享。共享的方法有两种,一是两个映射都映射到文件的同一个位置。二是fork函数创建进程的时候子进程继承附近成的映射。当两个或多个进程共享的页面相同时,一个进程对该位置内容的修改是否为其他进程所见,取决与创建mmap的时候传入的参数。如果传入的参数为私有,则修改的内容不会为其他进程看到,也没有实际写入文件。如果传入的标志为共享,则可以为其他进程看见,也会真实的写入文件。
内存映射的用途很多,比如以可执行程序的相应段来初始化进程的文本段。申请内存,文件I/O,以及进程间通信(通过共享映射通信)。

信号: 信号一般被称为软中断。进程收到信号,意味着有突发的情况发生。信号的类型很多,每一种标识不同的事件或情况。采用不同的整数来表示不同的信号,并以SIGXXXX形式来表示。
内核或者其他进程或者进程自身都可以向进程发送信号,例如,某些情况如用户按下ctrl-c,或者子进程退出,进程设定的定时器到期,进程尝试访问的地址无效等,内核都会向进程发送信号。在shell中,可以通过kill命令向进程发送信号,程序中可以通过kill()函数来实现相同功能。对待信号,可以选择忽略,或者使用默认处理函数,也可以自己设定信号处理函数,或者阻塞某些信号。

进程在shell中执行 在shell中执行命令时,每个命令会创建一个进程来执行。例如 ls -l | sort -k5n | less
就会创建三个进程,这三个进程通过管道实现进程间通信,三个进程同属一个进程组。

日期和时间
真实时间:日历时间,unix采用UTC时间,就是从1970年1月1日凌晨为起始点到现在额秒数。
进程时间:cpu时间,指的是自进程启动以来,所占用的cpu时间总量。可进一步将cpu时间划分为系统cpu时间和用户cpu时间。前者是指在内核模式中,执行代码所花费的时间,后者是指在用户空间中执行代码所花费的时间。
time命令会显示出真实时间,系统cpu时间和用户cpu时间

ccjing >time :real0m0.000suser0m0.000ssys0m0.000s

/proc文件系统 :
Linux提供/proc文件系统。/proc文件系统是一种虚拟文件系统,mount在/proc目录下,提供一个指向内核数据结构的接口,此外,还能通过一组以/proc/PID命名的目录查看系统中运行各进程的相关信息。

1 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 为什么15楼不好卖 为什么药店不卖奥司他韦 小秋不卖 退市股票不卖会怎么样 不卖铺盖打一三国人物 冬天卖什么利润大不压货 为什么医院不卖伊曲康唑 二手房卖不掉急死人 中国为什么不让卖爆炸盐 卖不卖 3d硬金为什么不按克卖 迈之灵为什么不让卖 宝塔糖为什么不让卖 为什么黄道益不能在大陆卖 40年产权公寓卖不掉 为什么处方药不随便卖 王氏保赤丸为啥不让卖 百蕊颗粒药店为什么不让卖 14楼为什么便宜也不好卖 为什么很多药店不卖百蕊颗粒 安康鱼肝为什么不让卖 eve药中国为什么不让卖 21型二踢脚为什么不能卖 凯美瑞混动为什么卖不动 顶层房子为什么不好卖 南宁2019很多房子卖不出去 十月馨药店为什么不明卖 三不问 养龟为什么不能养双 家里为什么不能养双猫 眼科医生不建议割双眼皮 新手为什么不要开双离合 千万不要买雷凌双擎 世上安得双法不负如来不负卿 肿泡眼大夫不建议割双眼皮 双胎为什么医生不建议做四维 双闪灯一直闪关不掉怎么解决 到付邮费是不是双倍 做完双眼皮不能吃什么 甲状腺双叶回声不均匀 不可抗力3完整免费观看双结局