APUE读书笔记之第一章 UNIX基础知识

1.UNIX系统的程序设计接口包括系统调用接口和标准C库提供的很多函数(注意本书对它们的称呼,系统调用接口跟函数)。

2.UNIX体系结构:内核(kernal)就是操作系统,它控制计算机硬件资源,提供程序运行时的环境。内核的接口称为系统调用(system call)。公用函数库构建在系统调用接口之上,应用程序既可以使用公用函数库,也可以使用系统调用。shell是一个特殊的应用程序,为运行其他应用程序提供接口。

    所有的操作系统都提供多种服务的入口点,由此程序向内核请求服务,这些入口点被称为系统调用。

    UNIX使用的技术是为每一个系统调用在标准C库中设置一个具有同样名字的函数。用户进程用标准C调用序列来调用这些函数,然后,函数又用系统所要求的技术调用相应的内核服务。虽然这些函数可能会调用一个或多个内核的系统调用,但是它们并不是内核的入口点(函数库中的系统调用函数一般会映射到系统调用,然后由系统调用进入内核)。

    man man命令可以查看UNIX程序员手册。命令man的参数2可以查看系统调用接口的说明(如:man 2 read)。命令man的参数3可以查看通用库函数的说明(如:man 3 printf)。

                                                            

                            


图1-11显示了系统调用跟库函数的差别,内核中的系统调用分配了一块空间给进程,而库函数malloc则在用户层次管理这一空间。

应用程序既可以调用系统调用也可以调用库函数。很多库函数则会调用系统调用。图1-12显示了这种差别(用户进程包括应用代码跟C库函数)。

系统调用跟库函数的另一个区别是:系统调用通常提供一种最小接口,而库函数通常提供比较复杂的功能。当我们比较不带缓冲的IO函数和标准IO函数的时候,还会看到这种区别。

进程控制系统调用(fork、exec和wait)通常由用户应用程序直接调用。但为了简化某些常见的情况,UNIX也提供了一些库函数,如system和popen。8.13节将说明ststem函数的一种实现形式,它使用基本的进程控制系统调用。

本书除非必须要区分两者时,对系统调用跟库函数都是有函数这一术语描述(站在用户的角度,用户既可以调用库函数接口,也可以调用系统调用接口。但对用户而言没多大区别,都是为用户提供服务的)。

3.shell的用户输入通常来自终端(交互式shell),有时则来自文件(称为shell脚本)。

4.目录项的逻辑视图与实际存放在磁盘上的方式是不同的。UNIX文件系统的大多数实现并不在目录项中存放属性,这是因为当一个文件具有多个硬链接时,很难保证多个属性副本之间的同步(文件系统里的文件只是一个名字,文件的内容跟属性真正存储在磁盘中,只有当这个文件的硬链接数变为1时,删除文件系统里的文件名才能真正删除磁盘里的文件。不把文件属性放在文件系统里,就是因为有多个硬链接时,文件属性无法同步。)。

5.文件描述符(file descriptor)通常是一个小的非负整数,内核用以标识一个特定进程正在访问的文件。当内核打开一个现有文件或创建一个新文件时,它都返回一个文件描述符。每当运行一个新程序时,所以的shell都为其打开3个文件描述符,即标准输入、标准输出和标准错误。一般都链接向终端,但可以重定向到某个文件。

函数read、write、open、lseek和close都提供了不带缓冲的IO。这些函数都使用文件描述符。





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值