欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

一起talk C栗子吧(第一百三十八回:C语言实例--文件操作:基于文件描述符一)

程序员文章站 2022-05-09 20:54:46
各位看官们,大家好,上一回中咱们说的是查看环境变量的例子,这一回咱们说的例子是:基于文件描述符的文件操作。闲话休提,言归正转。让我们一起talk c栗子吧! 看官们,我们在前...

各位看官们,大家好,上一回中咱们说的是查看环境变量的例子,这一回咱们说的例子是:基于文件描述符的文件操作。闲话休提,言归正转。让我们一起talk c栗子吧!

看官们,我们在前面介绍进程通信的时候简单地提到过文件操作。文件操作相对进程通信来说要容易一些,因此,当时也没有做详细的介绍,不过还是有看官提到了文件操作的内容。为了大家对文件操作有更加清晰的认识,今天我将和大家一起看看文件操作相关的内容。

文件类型

linux中,一切皆文件。因此,文件操作还是还很重要的内容,linux中的文件类型有:

常规文件(-); 目录文件(d); 连接文件(l); 设备文件(b或c); 管道文件(p); 套接字(socket);

我们可以通过ls -al命令来查看目录中文件的类型。上面括号中的字母表示该命令运行结果中文件类型的表示方法。我们举个例子进行说明:

ls -al /lib   //我们只截取了一部分命令运行结果,但是足以说明问题
total 684
drwxr-xr-x 24 root root   4096  2月  8  2015 .
drwxr-xr-x 22 root root   4096  3月 19 12:49 ..
drwxr-xr-x  2 root root   4096 11月 27  2014 brltty
lrwxrwxrwx  1 root root     21  2月  1  2015 cpp -> /etc/alternatives/cpp
-rw-r--r--  1 root root  26376  1月  9  2014 libip4tc.so.0.1.0
lrwxrwxrwx  1 root root     17  2月  1  2015 libip6tc.so.0 -> libip6tc.so.0.1.0
-rw-r--r--  1 root root  26376  1月  9  2014 libip6tc.so.0.1.0

该结果第一列的第一个字母就是文件类型,比如d表示该文件是目录文件,l表示该文件是链接文件,-表示该文件是常规文件。该目录中没有其它文件类型的文件,我们也就不说了,相信大家在遇到的这类文件的时候也能明白它们的文件类型。今天我们介绍的文件操作,可以用于设备文件以外的其它文件。

文件描述符

明白文件类型后, 我们介绍一下文件描述符。文件描述符由系统提供,系统提供的api接口通过它来操作文件。它通常一个非负整数,而且由系统分配和回收,分配时从最小的数值开始依次增大,文件操作完成后需要手动关闭文件,其实就是告诉系统去回收文件操作符,以便下次再使用,因此文件操作符是一个环保产品,可以循环利用。

文件操作符的值是唯一的,即使操作同一个文件也会有不同的文件操作符。文件操作符的值也不是无究大,它有一个最大值,也就是程序能够同时打开最多的文件数量,这个值与具体的系统有关,posix标准只规定了最小值为16,在linux中它的默认值为256.不过这个值会随着系统运行的情况动态变化。

系统默认使用了前三个文件描述符:0,12。它们分别表示标准输入,标准输出和标准错误。这三个文件描述符比较特殊,每个进程启动时都会自动打开这三个文件操作符,在进程结束时又会自动关闭它们。也就是说它们是由系统进行管理的,我们只管使用就行,其它的事情交给系统去处理。我们举个例子来说明:

ls -al /dev/fd/  //我们使用ls命令查看当前进程打开的文件描述符
total 0
dr-x------ 2 tom tom  0  4月 30 10:01 .
dr-xr-xr-x 9 tom tom  0  4月 30 10:01 ..
lrwx------ 1 tom tom 64  4月 30 10:01 0 -> /dev/pts/2
lrwx------ 1 tom tom 64  4月 30 10:01 1 -> /dev/pts/2
lrwx------ 1 tom tom 64  4月 30 10:01 2 -> /dev/pts/2
lr-x------ 1 tom tom 64  4月 30 10:01 3 -> /proc/4012/fd  //当前进程打开的文件描述符为3

从上面的运行结果中可以看到,当前进程打开的文件描述符为3,而0,1,2这三个文件描述符是系统自动打开的。

各位看官,关于文件操作:基于文件描述符的例子咱们就说到这里。欲知后面还有什么例子,且听下回分解 。