当前位置:网站首页>The C Programming Language(第 2 版) 笔记 / 8 UNIX 系统接口 / 8.1 文件描述符
The C Programming Language(第 2 版) 笔记 / 8 UNIX 系统接口 / 8.1 文件描述符
2022-06-12 16:15:00 【M菜鸟M】
8 UNIX 系统接口
UNIX 操作系统通过一系列的系统调用提供服务
这些系统调用实际上是操作系统内的函数,它们可以被用户程序调用
本章将介绍如何在 C 语言程序中使用一些重要的系统调用
如果读者使用的是 UNIX,本章将会对你有直接的帮助
这是因为,我们经常需要借助于系统调用以获得最高的效率,或者访问标准库中没有的某些功能
但是,即使读者是在其它操作系统上使用 C 语言,本章的例子也将会帮助你对 C 语言程序设计有更深入的了解
不同系统中的代码具有相似性,只是一些细节上有区别而已
因为 ANSI C 标准函数库是以 UNIX 系统为基础建立起来的,所以,学习本章中的程序还将有助于更好地理解标准库
本章的内容包括 3 个主要部分,输入/输出、文件系统和存储分配
其中,前两部分的内容要求读者对 UNIX 系统的外部特性有一定的了解
第 7 章介绍的输入/输出接口对任何操作系统都是一样的
在任何特定的系统中,标准库函数的实现必须通过宿主系统提供的功能来实现
接下来的几节将介绍 UNIX 系统中用于输入和输出的系统调用,并介绍如何通过它们实现标准库
8.1 文件描述符
在 UNIX 操作系统中,所有的外围设备(包括键盘和显示器)都被看作是文件系统中的文件
因此,所有的输入/输出都要通过读文件或写文件完成
也就是说,通过一个单一的接口就可以处理外围设备和程序之间的所有通信
通常情况下,在读或写文件之前,必须先将这个意图通知系统,该过程称为打开文件
如果是写一个文件,则可能需要先创建该文件,也可能需要丢弃该文件中原先已存在的内容
系统检查你的权力(该文件是否存在?是否有访问它的权限?)
如果一切正常,操作系统将向程序返回一个小的非负整数,该整数称为文件描述符
任何时候对文件的输入/输出都是通过文件描述符标识文件,而不是通过文件名标识文件
文件描述符类似于标准库中的文件指针或 MS-DOS 中的文件句柄
系统负责维护已打开文件的所有信息,用户程序只能通过文件描述符引用文件
因为大多数的输入/输出是通过键盘和显示器来实现的,为了方便起见,UNIX 对此做了特别的安排
当命令解释程序(即 shell)运行一个程序的时候
将打开 3 个文件,对应的文件描述符分别为 0、1、2,依次表示标准输入,标准输出和标准错误
如果程序从文件 0 中读,对 1 和 2 进行写,就可以进行输/输出而不必关心打开文件的问题
程序的使用者可通过 < 和 > 重定向程序的 I/O:
prog <infile >outfile
这种情况下,shell 把文件描述符 0 和 1 的默认赋值改变为指定的文件
通常,文件描述符 2 仍与显示器相关联,这样,出错信息会输出到显示器上
与管道相关的输入/输出也有类似的特性
在任何情况下,文件赋值的改变都不是由程序完成的,而是由 shell 完成的
只要程序使用文件 0 作为输入,文件 1 和 2 作为输出,它就不会知道程序的输入从哪里来,并输出到哪里去
边栏推荐
- Redis string type common commands
- 联通网管协议框图
- Development practice of ag1280q48 in domestic CPLD
- Read MHD and raw images, slice, normalize and save them
- < 山东大学软件学院项目实训 > 渲染引擎系统——基础渲染器(六)
- < 山东大学软件学院项目实训 > 渲染引擎系统——基础渲染器(三)
- Project training of Software College of Shandong University rendering engine system radiation pre calculation (IX)
- Chapter I linear table
- acwing 797 差分
- 关于组件传值
猜你喜欢

Multimix: small amount of supervision from medical images, interpretable multi task learning

Kill program errors in the cradle with spotbugs

关于组件传值

Super detailed dry goods! Docker+pxc+haproxy build a MySQL Cluster with high availability and strong consistency

Apache kylin Adventure

一步步创建包含自定义 Screen 的 ABAP 程序的详细步骤

大规模实时分位数计算——Quantile Sketches 简史

< 山东大学软件学院项目实训 > 渲染引擎系统——辐射预计算(八)

看《梦华录》上头的人都该尝试下这款抖音特效

Scanpy (VI) analysis and visualization of spatial transcriptome data
随机推荐
Let's talk about events. Listen to those things. - Part one
批量--03---CmdUtil
Interview: difference between '= =' and equals()
线程池执行流程
Global and Chinese market of soft capsule manufacturing equipment 2022-2028: Research Report on technology, participants, trends, market size and share
Writing code can also be classified as "manual" or "vulgar", and we should be good at finding good hands!
acwing 802. 区间和 (离散化)
ER diagram made by StarUML based on the last student achievement management system
From K-means to capsule
Homology? Cross domain? How to solve cross domain problems?
【工具推荐】个人本地 markdown 知识图谱软件 Obsidian
Explore the Apache shardingsphere SQL parse format function
写代码也有本手俗手之分,而我们要善于发现妙手!
Why doesn't Alibaba recommend MySQL use the text type?
位运算例题(待续)
Development practice of ag1280q48 in domestic CPLD
IDEA中文棱形乱码错误解决方法--控制台中文输出棱形乱码
面试:了解装箱和拆箱操作吗?
第一章 线性表
Dongmingzhu talks about batteries: the most essential thing is safety