linux文件操作(一)

来源:互联网 发布:仓库拣货路线优化 编辑:程序博客网 时间:2024/05/16 14:31
1.linux文件结构
     它们为操作系统服务和设备提供了一个简单而统一的接口。在linux中,一切都是文件。
大数情况下你只需要使用五个基本的函数-open close read write ioctl。

目录也是文件,正常情况下所有用户都必须用上层的opendir/readdir接口来读取目录,不需要了解特定系统中目录实现的具体细节。


2.目录
     文件,除了本身包含的内容以外,它还会有一个名字和一些属性,即“管理信息”。这些属性被保存在文件的inode(节点)数据结构中,它是文件系统中的一个特殊的数据块,他同时还包含文件的长度和文件在磁盘上的存放位置。
目录是文件,它用来保存其他文件的节点号和名字。目录文件中的每个数据项都指向某个文件的节点,删除文件名就等于删除与之对应的链接(文件的节点号可以通过ln -i命令查看)。通过使用ln命令在不同的目录中创建指向同一个文件的链接。如果指向某个文件的连接数(ls  -l命令的输出中跟在访问权限后面的那个数字)变为零,就表示该节点以及其指向的数据不再被使用,磁盘上的相应位置就会被标记为可用空间。


3.文件和设备
硬件在linux操作系统中通常也被映射为文件。在linux中比较重要的设备文件有三个--/dev/console /dev/tty dev/null

1)/dev/console 这个设备代表的是系统控制台。错误信息和诊断信息通常会被发送到这个设备。
2)/dev/tty 如果一个进程有控制终端的话,那么特殊文件/dev/tty就是这个控制终端的别名。在能够使用该设备文件的情况下,/dev/tty允许程序直接向用户输出的信息。
3)/dev/null 这是空设备,所有写向这个设备的输出都将被丢弃。而读这个设备会立刻返回一个文件尾标志,所以在cp命令可以把它用做拷贝空文件的源文件。
创建空文件的另一个方法是使用touch <filename>命令,它的作用是改变文件的修改时间,如果指定名字的文件不存在,就创建一个新文件,但它并不会把所有内容的文件变成空文件。


3.2系统调用和设备驱动程序
很少量的函数就可以对文件和设备进行访问和控制。这些函数被称为系统调用,由linux直接提供,它们也是通向操作系统本身的接口。
操作系统的核心部分,即内核,是一组设备驱动程序。这是一些对系统硬件进行控制的底层接口。
用来访问设备驱动程序的底层函数(系统调用)包括:
open: 打开文件或设备
read:从打开的文件或设备里读数据
write:向文件或设备写数据
close:关闭文件或设备
ioctl: 把控制信息传递给设备驱动程序。


3.3库函数
在输入输出操作中,直接使用底层系统调用的问题是它们的效率非常低。

系统调用会影响系统的性能。与函数调用相比,系统调用的开销要大些,因为在执行系统调用时,Linux必须从用户代码切换到内核代码运行,然后再返回用户代码。
硬件会对顶层系统调用一次所能读写的数据块做出一定的限制。


      用户程序
库 <----------- 用户空间
| 调用
系统调用 <------------内核空间
设备驱动程序:
|
硬件设备

0 0
原创粉丝点击