《UNIXLinux程序设计教程》一3.10 思考与练习

3.10 思考与练习

  1. 打开文件时,如果希望总是创建一个新文件,应当使用什么标志?如果希望每次写出的数据都实际写到物理存储设备,应当使用什么标志?
  2. 程序3-1中,存放读写数据的缓冲区大小为1024字节。请在你的机器上指定不同大小的缓冲区来运行这个程序,仔细体会缓冲区大小对程序效率的影响。
  3. open()调用成功总是返回当前可用的编号 的描述字。对同一个文件用不同open()打开的文件描述字具有 的文件位置,由dup()重复的文件描述字具有 的文件位置。
  4. 编写一个程序打印出指定文件的文件状态标签。
  5. 用fcntl()设置文件状态标签时,为什么只能设置O_APPEND和O_NONBLOCK而不能设置其他标志?
  6. 什么是所谓的“慢系统调用”?
  7. 如何实现非阻塞I/O?请给出一个需要使用非阻塞I/O的应用例子。
时间: 2024-10-30 23:49:51

《UNIXLinux程序设计教程》一3.10 思考与练习的相关文章

《UNIXLinux程序设计教程》一导读

前言 十年前,我们出版了<UNIX程序设计教程>(清华大学出版社).十年来,影响UNIX编程接口的规范和标准发生了较大变化,当时写书参照的"Single UNIX Specification 2"现在已发展到了"Single UNIX Specification 4",而若干分离独立的规范和标准,包括Single UNIX Specification,现在都已经统一在POSIX.1-2008标准之下.同时,随着Linux系统的成熟和发展,UNIX系统已不

《UNIXLinux程序设计教程》一2.10 思考与练习

2.10 思考与练习 打开文件的实质是什么? 从应用的角度看,UNIX系统中程序与文件建立连接有几种机制?流与文件描述字有什么区别? 什么是文件位置?它起什么作用? 系统为每一个进程自动打开的输入输出流有哪些?它们对应的名字是什么? 写"r"方式打开的文件会发生什么情况?读"w"方式打开的文件呢?建议你编写一个这样的程序试试. 按读写数据的粒度分,有几类流输入输出函数? 为什么说gets()是危险的函数? 程序2-3说明了fgets()和gets()的不同.运行该程

《UNIXLinux程序设计教程》一1.9 思考与练习

1.9 思考与练习 你是否有志于为中国计算机软件的开发做出自己的贡献?从UNIX和Linux的诞生历程中,你能感悟到什么? 标准对应用开发有什么意义?标准是一成不变的吗?UNIX的发展中主要出现了哪几种版本和哪几种标准?目前主流计算机开发商遵循的是什么标准? Linux服从此标准吗? 什么是进程?用UNIX的ps(1)命令查看你的系统中的所有进程以及它们的状态信息.你能看到哪些进程,能看到进程的几种状态? 什么是系统调用?它与普通函数有何不同? 在你的机器上运行程序1-2,查看机器的主机名.操作

《UNIXLinux程序设计教程》一1.2 标准

1.2 标准 UNIX变体的激增产生了许多兼容性问题,特别是各种商业UNIX变体的出现使情况变得更加复杂.系统V和BSD在许多方面不同-它们有不同且互不兼容的物理文件系统.网络机制和虚拟内存结构.这些不同中有一些限制在内核设计和实现上,但另一些出现在程序设计接口层,这导致没有一个复杂的应用程序能够不加修改地同时运行于系统V和BSD系统.另一方面,商业变体常常带有各自的增值特征,应用程序员常常搞不清它们.结果,为了保证程序在各种不同的UNIX上都能工作,程序员不得不付出极大的努力.这种情形导致了对

《UNIXLinux程序设计教程》一1.1 UNIX简史

1.1 UNIX简史 UNIX早在MS DOS.Windows出现之前就已经诞生了,到现在已有四十多年的历史. 1.1.1 UNIX的诞生 1965年麻省理工学院的MAC课题组和通用电气公司一起启动了一个项目-开发一个新的称为Multics的多用户.交互式操作系统.Multics的目的是向大用户团体提供同时计算和存储的能力.在当时批处理系统为主流的情况下,这是一个创新的概念.此后不久,贝尔实验室的计算科学研究中心也加入了这一计划.但在1969年,这个研究组认为开发Multics需要更长的时间,于

《UNIXLinux程序设计教程》一2.8 格式I/O

2.8 格式I/O 前几节介绍的流I/O函数除了以字符或行方式进行读写外,并不对数据进行解释,但在很多时候应用都会需要对输入输出数据进行解释,因为数据在计算机内的表示和人们可读的形式是不同的.数据在计算机内是二进制形式,在计算机外部常常为正文形式.例如,十进制数12在计算机内部的32位二进制表示是:00000000000000000000000000001100.当这个数在打印机上输出或者在终端屏幕上显示时,必须转换为字符'1'和'2',它们的ASCII编码分别为00110001和0011001

《UNIXLinux程序设计教程》一3.7 非阻塞I/O

3.7 非阻塞I/O 前面几节已介绍了完成各种I/O的系统调用,如read().write().open()等,这些系统调用在默认情形下均是阻塞的,也就是说,调用必须等待操作完成,即读写到数据,才能返回.但在有些应用中往往还有需要非阻塞I/O的情形.本节我们讨论使得这些调用成为非阻塞的方法. UNIX系统调用根据阻塞还是非阻塞分为两类:一类是所谓的"慢"系统调用,其他的则归为另一类.慢系统调用是以下有可能被永久阻塞的调用: 调用read()读管道.终端设备或网络设备文件时,如果数据不出

《UNIXLinux程序设计教程》一3.1 文件描述字的打开、创建和关闭

3.1 文件描述字的打开.创建和关闭 函数open()或create()用于打开或创建一个文件描述字. #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> int open (const char * filename, int flags [, mode_t mode]); int create (const char * filename, mode_t mode); open()用于打开或

《UNIXLinux程序设计教程》一2.4 读和写流

2.4 读和写流 一旦打开了一个流,就能对它进行读写,读写可以按无格式方式也可以按有格式方式进行.这一节介绍无格式I/O函数,下一节介绍有格式I/O函数.有以下三种类型的无格式I/O函数可供选择:1)字符I/O函数.这种函数每次读或写一个字符.2)行I/O函数.这种函数每次读写一行,每一行以换行符结束.3)块I/O函数.这种函数支持成块I/O,它们每次读写若干个对象,每个对象的大小是指定的.块I/O有时也称为二进制I/O.对象I/O或结构I/O. 2.4.1 字符I/O 如下三个字符输入函数每次