- 1、本文档共60页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Linux下的文件操作 目录 ▲文件 文件:一组相关数据的有序集合 在Linux 中,一切(几乎一切)都是文件。Linux 环境中的文件具有特别重要的意义,因为它们为操作系统服务和设备提供了一个简单而统一的接口。设备对操作系统而言也可以看做是文件,通常程序完全可以像使用文件那样使用磁盘文件、串口、打印机和其他设备。目录也是一种文件,但它是一种特殊类型的文件。 可以这么说Linux 中的任何事物都可以用一个文件代表,或者可以通过特殊的文件进行操作。当然,它们会与我们熟悉的传统文件有一些细微的区别,但两者的基本原则是一致的 Linux常见的文件类型有5种:普通文件、目录文件、链接文件、设备文件和管道文件。 Linux文件权限可分四种:可读取、可写入、可执行和无权限。分别用r、w、x和-表示。 ▲系统调用 系统调用 是指操作系统提供给用户程序调用的一组“特殊”接口,用户程序可以通过这组“特殊”接口来获得操作系统内核提供的服务。 例如用户可以通过进程控制相关的系统调用来创建进程、实现进程调度、进程管理等。 为什么用户程序不能直接访问系统内核提供的服务呢? 这是由于在Linux中,为了更好地保护内核空间,将程序的运行空间分为内核空间和用户空间(也就是常称的内核态和用户态),它们分别运行在不同的级别上,在逻辑上是相互隔离的。因此,用户进程在通常情况下不允许访问内核数据,也无法使用内核函数,它们只能在用户空间操作用户数据,调用用户空间的函数。 但是,在有些情况下,用户空间的进程需要获得一定的系统服务(调用内核空间程序),这时操作系统就必须利用系统提供给用户的“特殊接口”——系统调用规定用户进程进入内核空间的具体位置。进行系统调用时,程序运行空间需要从用户空间进入内核空间,处理完后再返回到用户空间。 Linux系统调用部分是非常精简的系统调用(只有250个左右)),它继承了UNIX系统调用中最基本和最有用的部分。这些系统调用按照功能逻辑大致可分为进程控制、进程间通信、文件系统控制、系统控制、存储管理、网络管理、socket控制、用户管理等几类。 ▲库函数 前面讲到的系统调用并不是直接与程序员进行交互的,在实际使用中程序员使用的通常是库函数. 这些系统调用编程接口主要通过C库(libc)实现的. 并不是所有库函数都一一对应一个系统调用.有时,一个库存函数会需要几个系统调用来共同完成函数的功能;有一些库存函数不需要调用任何系统调用(因其不是完成内核提供的服务). ▲系统命令 系统命令相对库函数更高一层,它实际上是一个可执行程序,它的内部引用了库函数来实现相应的功能.比如:ls、cd等命令 ▲文件I/O基本操作 Linux系统中文件操作主要有: 底层IO操作 标准IO操作 ▲底层IO操作 底层文件I/O 不带缓冲 不带缓冲指的是每个文件操作动作都调用内核中的相应系统调用 通过文件描述符来访问文件 ▲文件描述符 如何区分和引用特定的文件呢? 这里用到了一个重要的概念——文件描述符。对于Linux而言,所有对文件(设备)的操作都是使用文件描述符来进行的。 文件描述符是一个非负的整数,它是一个索引值。当打开一个现存文件或创建一个新文件时,内核就向当前运行程序返回一个文件描述符;当需要读写文件时,也需要把文件描述符作为参数传递给相应的函数 通常,一个程序一开始运行时,都会打开3个文件: 标准输入 标准输出 标准出错处理 这3个文件分别对应文件描述符为0、1和2(也就是宏替换STDIN_FILENO、STDOUT_FILENO和STDERR_FILENO)。 ▲底层文件I/O常用函数 open() close() read() write() lseek() open()函数是用于打开或创建文件,在打开或创建文件时可以指定文件的属性及用户的权限等各种参数。 close()函数是用于关闭一个被打开的文件。当一个进程终止时,所有被它打开的文件都由内核自动关闭,很多程序都使用这一功能而不显示地关闭一个文件。 在open函数中,flag参数可通过”|”组合构成,但前3个函数不能相互组合. close函数 open和close函数的使用实例 read()函数:是用于将从指定的文件读出数据 write()函数:是用于向文件写数据 lseek()函数:是用于文件指针定位到相应的位置 例:读取20字节的数据到缓冲区 write()函数是用于向打开的文件写数据,写操作从文件的当前指针位置开始。对磁盘文件进行写操作,若磁盘已满则write()函数返回失败。 注意点: write()调用成功返回已写的字节数,失败返回-1。 write()的返回值通常与count不同,因此需要循环将全部待写
文档评论(0)