UNIX环境高级编程(第三版)
文章平均质量分 90
吃着火锅x唱着歌
这个作者很懒,什么都没留下…
展开
-
UNIX环境高级编程 学习笔记 第二十一章 与网络打印机通信
现在我们开发一个能与网络打印机通信的程序。这些打印机通过以太网与多个计算机互联,并且通常既支持纯文本文件也支持PostScript文件。尽管一些应用程序也支持其他通信协议,但一般使用网络打印协议(Internet Printing Protocol,IPP)与打印机通信。两个程序:1.打印假脱机守护进程:将作业发送到打印机。2.命令行程序:将打印作业提交到假脱机守护进程。网络打印协议为建立基于网络的打印系统指定了通信规则,通过将一个IPP服务器嵌入到带网卡的打印机中,打印机就能对许多计算机系统的请求加以原创 2022-09-14 23:08:07 · 2388 阅读 · 0 评论 -
UNIX环境高级编程 学习笔记 第二十章 数据库函数库
20世纪80年代早期,UNIX系统被认为不适合运行多用户数据库系统,因为早期的系统(如V7)没有提供任何形式的IPC机制(除了半双工管道),也没有提供任何形式的字节范围锁机制。但现在这些缺陷大多已得到纠正,到20世纪80年代后期,UNIX系统已为运行可靠的、多用户的数据库系统提供了一个适合的环境,从那时以来,很多商业公司都已提供这种数据库系统。dbm是一个在UNIX系统中很流行的数据库函数库,它由Ken Thompson开发,使用了动态散列结构,最初,它是V7提供的,并出现在所有BSD版本中,也包含在SV原创 2022-07-20 23:52:43 · 453 阅读 · 0 评论 -
UNIX环境高级编程 学习笔记 第十九章 伪终端
终端登录是经由自动提供终端语义的终端设备进行的,在终端和运行程序之间有一个终端行规程,通过该规程我们能设置终端特殊字符(如退格、行删除、中断等)。但当一个登录请求到达网络连接时,终端行规程并不是自动被加载到网络连接和登录shell之间。下图显示了一个伪终端设备驱动程序,用于提供终端语义:伪终端术语指,对一个应用程序而言,它看上去像一个终端,但事实上它并不是一个真正的终端。下图显示了使用伪终端时,相关进程的典型安排:上图关键点如下:1.通常,一个进程打开伪终端主设备,然后调用fork,子进程建立一个原创 2022-05-08 23:48:03 · 1003 阅读 · 0 评论 -
UNIX环境高级编程 学习笔记 第十八章 终端I/O
20世纪70年代后期,系统Ⅲ(UNIX System III)发展出一套不同于V7( Version 7 Unix)的终端IO例程,使得UNIX终端IO处理分立为两种不同风格:一种是系统Ⅲ风格,它延续到了System V;另一种是V7风格,它成为了BSD派生的系统的标准。和信号一样,POSIX.1在这两种分隔的基础上制定了终端IO的标准,本章介绍POSIX.1终端IO标准。终端IO之所以复杂,部分原因是人们将其应用到很多地方:终端、计算机之间的直接连接、调制解调器、打印机等。终端IO有两种工作模式:1原创 2022-04-16 18:15:26 · 1105 阅读 · 0 评论 -
UNIX环境高级编程 学习笔记 第十七章 高级进程间通信
UNIX域套接字可在同一计算机上运行的两个进程间传送打开文件描述符。服务器进程可以将文件描述符和一个名字关联,客户进程可用这个名字与服务器进程会和。UNIX域套接字比因特网域套接字效率更高,UNIX域套接字仅仅复制数据,不执行任何协议处理。UNIX域套接字提供字节流接口和数据报接口,UNIX域数据报服务是可靠的,不会丢失报文或传递失序。可用socketpair函数创建一对无命名的、相互连接的UNIX域套接字:虽然函数有domain参数可指定域,但一般操作系统只对UNIX域提供支持。一对相互连接的U原创 2022-02-10 00:55:43 · 1605 阅读 · 0 评论 -
UNIX环境高级编程 学习笔记 第十六章 网络IPC:套接字
socket的设计目标之一:同样的接口既可以用于计算机间通信,也可以用于计算机内通信。socket接口可采用许多不同的网络协议进行通信,本章讨论限制在因特网事实上的通信标准:TCP/IP协议栈。套接字是通信端点的抽象。正如使用文件描述符访问文件,应用程序用套接字描述符访问套接字。套接字描述符在UNIX系统中是一种文件描述符,许多处理文件描述符的函数(如read、write函数)都可用于处理套接字描述符。创建一个套接字:domain(域)参数确定通信的特性,包括地址格式。POSIX.1指定的各个域如下原创 2021-12-01 17:19:16 · 537 阅读 · 0 评论 -
UNIX环境高级编程 学习笔记 第十三章 守护进程
守护进程的生存期长,它们常常在系统引导时启动,仅在系统关闭时才终止,它们没有控制终端,是在后台运行的。如果在基于BSD的系统上执行:ps -axj-a选项显示由其他用户拥有的进程状态;-x选项显示没有控制终端的进程状态;-j选项显示与作业有关的信息(如会话ID、进程组ID、控制终端、终端进程组ID),基于System V的系统中,与此相类似的命令为ps -efj。为提高安全性,某些UNIX系统不允许用户使用ps命令查看不属于自己的进程。以上命令输出为:从左到右每列含义依次为:用户ID、进程ID、原创 2021-10-11 22:17:46 · 425 阅读 · 0 评论 -
UNIX环境高级编程 学习笔记 第九章 进程关系
每个进程都有一个父进程,这个父进程通常是初始的内核级进程。早期UNIX系统中,用户用哑终端(只有输入输出字符功能,没有处理器和硬盘,通过串行接口连接到主机,一切工作交给主机做)进行登录,这些哑终端或者是本地直接连接的,或者是通过调制解调器远程连接的,这两种情况下,登录都经过内核中的终端设备驱动程序。因为连到主机上的终端设备数是固定的,所以同时登录数也有已知的上限。随着位映射图形终端的出现,开发出了窗口系统,创建终端窗口的应用也开始出现,它仿真了基于字符的终端。现在,某些平台允许用户登录后启动一个窗口系原创 2021-09-06 18:24:46 · 422 阅读 · 0 评论 -
UNIX环境高级编程 学习笔记 第六章 系统数据文件和信息
UNIX系统口令文件(POSIX.1称其为用户数据库)包含以下字段,这些字段也包含在头文件pwd.h中定义的passwd结构中:原创 2021-08-27 00:38:43 · 491 阅读 · 0 评论 -
UNIX环境高级编程 学习笔记 第四章 文件和目录
4个stat函数:stat函数返回名为参数pathname的文件有关的信息结构。fstat函数获得已经在描述符fd上打开的文件的信息。lstat函数的参数pathname如果是一个符号链接文件,它返回符号链接的有关信息,而非该符号链接引用的文件的信息。fstatat函数为一个相对于当前打开目录(由fd参数指向)的路径名返回文件统计信息,参数flag为AT_SYMLINK_NOFOLLOW时返回符号链接本身的信息,否则,默认情况下返回符号链接所指向的文件的信息,参数fd如果为AT_FDCWD且pathna原创 2020-10-09 08:25:59 · 360 阅读 · 0 评论 -
UNIX环境高级编程 学习笔记 第十五章 进程间通信
进程间通信可通过传送打开的文件,可以经由fork和exec来传送,也可以通过文件系统传送。IPC(InterProcess Communication,进程间通信)是进程通信方式的统称,不同UNIX系统支持的IPC形式不同:虽然SUS列要求的是半双工管道,但允许实现支持全双工管道,上图中“(全)”表示该系统用全双工管道支持半双工管道的实现,即使应用在编写时假定基础操作系统只支持半双工管道,支持全双工管道的实现也能使这种应用程序正常工作。上图中,对于全双工管道,如果该特征通过UNIX域套接字支持,则标原创 2020-09-19 21:14:13 · 945 阅读 · 0 评论 -
UNIX环境高级编程 学习笔记 第十四章 高级I/O
低速系统调用为可能使进程永远阻塞的一类系统调用:1.如果某些文件类型(管道、终端设备、网络设备)的数据不存在,读操作可能会使调用者永远阻塞。2.如果数据不能被某文件类型立即接受(管道中无空间,网络流控制),写操作可能会使调用者永远阻塞。3.再某条件发生前打开某文件类型可能发生阻塞(如要打开一个终端设备,需要先等待与之连接的调制解调器应答;如以只写模式打开FIFO,在没有其他进程已用读模式打开该FIFO时也要等待)。4.对已经加上强制性记录锁的文件进行读写。5.某些ioctl操作。6.某些进程间通原创 2020-08-16 18:50:05 · 508 阅读 · 0 评论 -
UNIX环境高级编程 学习笔记 第五章 标准I/O库
标准IO库处理了如缓冲区分配、以优化的块长度执行IO等细节,使得用户不必担心如何选择使用正确的块长度。对于write、read等函数,是围绕文件描述符的,打开文件的描述符被用于后续的IO操作,而对于标准IO库,它们的操作是围绕流的,当标准IO库打开或创建一个文件时,我们使一个流与一个文件相关联。提供每次输入一行功能的函数:参数指定了缓冲区的地址,读入的行将被送入其中。gets从标准输入读,fgets从指定的流读。fgets函数需要指定缓冲长度n,此函数一直读到下一个换行符为止,但不超过n-1个字原创 2020-07-16 20:59:39 · 590 阅读 · 0 评论 -
UNIX环境高级编程 学习笔记 第十二章 线程控制
可用sysconf查询的线程限制:原创 2020-07-02 22:10:07 · 322 阅读 · 0 评论 -
UNIX环境高级编程 学习笔记 第十一章 线程
多线程时,每个线程处理各自的任务,进程就可在某一时刻做不止一件事,只有在两任务处理过程互不依赖情况下,才能交叉执行。多进程必须使用其他机制才能共享内存和文件描述符,而多线程自动地共享进程的所有信息,包括可执行程序代码、程序全局内存和堆内存、栈、文件描述符。交互程序也可通过多线程改善响应时间,可把程序中处理用户输入输出部分与其他部分分开。多线程程序在串行化任务时不得不阻塞,由于某些线程阻塞时还有另外的线程可以运行,因此多线程程序在单处理器上也可以改善响应时间和吞吐量。单核CPU上运行的多线程程序, 同原创 2020-06-26 18:15:02 · 577 阅读 · 0 评论 -
UNIX环境高级编程 学习笔记 第十章 信号
信号是软件中断。信号提供了一种处理异步事件的方法,如终端用户键入中断键,会通过信号机制停止一个程序,或及早终止管道中的下一个程序。UNIX早期系统(如V7)提供的信号模型不可靠,信号可能丢失。而且在执行临界区代码时,进程很难关闭所选择的信号。4.3BSD和SVR3对信号模型增加了可靠信号机制,但Berkeley和AT&T所做更改之间不能兼容。POSIX.1对可靠信号例程进行了标准化。每个信号都有一个名字,它们由SIG开头。如SIGABRT是夭折信号;SIGALRM是闹钟信号,由alarm函数设置原创 2020-06-17 16:28:08 · 899 阅读 · 0 评论 -
UNIX环境高级编程 学习笔记 第八章 进程控制
进程ID是一个非负整型,唯一标识一个进程,因此常用其作其他标识符的一部分以保证其唯一性,如使用进程ID创建唯一文件名。进程ID可复用。大多UNIX实现延迟复用算法,使得新进程ID不同于最近终止进程的ID。系统中有专用进程,ID为0的进程通常是调度进程,常被称为交换进程,该进程是内核的一部分,它不执行任何磁盘上的程序,因此也被称为系统进程。ID为1的进程通常是init进程,在自举过程结束时由内核调用,它的程序文件在较早的UNIX中是/etc/init,较新版本中是/sbin/init,它负责自举内核后启动原创 2020-06-05 18:59:43 · 452 阅读 · 0 评论 -
UNIX环境高级编程 学习笔记 第七章 进程环境
C总是从main函数开始执行,main函数的原型是:int main(int aegc, char *argv[]);argc是命令行参数的数目,argv是指向参数的各个指针所构成的数组。内核执行C程序时(使用一个exec函数),在调用main之前先调用一个特殊的启动例程。可执行程序文件将此启动例程之行为程序的起始地址,这是由连接编辑器设置的,而连接编辑器由C编译器调用。启动例程从内核取得命令行参数和环境变量值,为调用main做好准备。五种正常终止程序的方式:1.从main函数返回。2.调用e原创 2020-05-26 15:17:22 · 306 阅读 · 0 评论 -
UNIX环境高级编程 学习笔记 第三章 文件I/O
UNIX系统大多数文件IO只用open、read、write、lseek、close。不带缓冲的IO指每个read和write都调用内核中的一个系统调用,不带缓冲的IO不是ISO C的组成部分,但是POSIX.1和SUS的的组成部分。对内核而言,所有打开的文件都通过文件描述符引用,当打开一个现有文件或创建一个新文件时,内核向进程返回一个文件描述符。open、creat返回文件描述符标识该文件,可将其作为参数传递给read和write。UNIX的shell通常把文件描述符0与进程标准输入关联,文件描述符原创 2020-05-21 15:22:48 · 456 阅读 · 0 评论 -
UNIX环境高级编程 学习笔记 第二章 UNIX标准及实现
C语言的ANSI标准在1989年得到批准,此标准也被采纳为国际标准ISO/IEC 9899:1990。ANSI是美国国家标准学会(American National Standards Institute),它是国际标准化组织ISO(Intenational Organization for Standardization)中代表美国的成员。IEC是国际电子技术委员会(International Electrotechnical Commission)。1999年,ISO C标准被更新。它由ISO/IEC原创 2020-05-16 14:40:12 · 467 阅读 · 0 评论 -
UNIX环境高级编程 学习笔记 第一章 UNIX基础知识
所有OS都为它们所运行的程序提供服务,包括打开文件、执行新程序、分配存储区等。操作系统可定义为一种软件,它控制计算机硬件资源,提供程序运行环境。通常将这种软件称为内核,它相对较小、位于系统核心。内核接口被称为系统调用。公用函数库构建在系统调用接口之上,应用程序既可以使用函数库,也可以使用系统调用:shell是一个特殊应用程序,为运行其他应用程序提供了一个接口。广义上操作系统包括内核、系统...原创 2020-05-10 12:16:59 · 449 阅读 · 0 评论