Linux文件IO编程——底层文件I/O操作

本文介绍了Linux中文件描述符的概念及其在文件操作中的作用,包括open()、close()、read()、write()和lseek()等基本文件I/O操作。此外,还讲解了文件锁的两种类型:建议性锁和强制性锁,以及实现锁的lockf()和fcntl()函数。最后,探讨了多路复用技术,如select()和poll()在I/O处理模型中的应用。
摘要由CSDN通过智能技术生成

一、Linux中文件及文件描述符概述

       在Linux中对目录和设备的操作都等同于文件的操作,Linux中文件主要分为4种:普通文件、目录文件、链接文件和设备文件。

       内核通过文件描述符来区分和引用特定的文件。对Linux而言,所有设备和文件的操作都是使用文件描述符来进行的。文件描述符是一个非负的整数,它是一个索引值,并指向在内核中每个进程打开文件的记录表。当打开一个现存文件或创建一个新文件时,内核就向进程返回一个文件描述符;当需要读写文件时,也需要把文件描述符作为参数传递给相应的函数。

       通常,一个进程启动时都会打开三个文件:标准输入、标准输出和出错处理。这三个文件分别对应文件描述法为0、1和2(也就是替换宏STDIN_FILENO、STDOUT_FILEON和STDERR_FILENO)。

二、底层文件I/O操作

1.基本文件操作

(1)open()函数用于打开或创建文件,在打开或创建文件时可以指定用户的属性及用户的权限等各种参数。

open()函数语法要点
所需头文件

#include<sys/types.h>  /*  提供类型pid_t的定义  */

#include<sys/stat.h>

#include<fcntl.h>

函数原型 int open(const char *pathname,int flags,int perms)
函数传入值 pathname 被打开的文件名(包括路径名)
flag:文件打开的方式 O_RDONLY:以只读方式打开文件
O_WRONLY:以只写方式打开文件
O_RDWR:以读写方式打开文件
O_CREAT:如果该文件不存在,就创建一个新的文件,并用第三个参数为其设置权限
O_EXCL:如果使用O_CREAT时文件存在,则可返回错误消息。这一参数可测试文件是否存在。此时open是原子操作,防止多个进程同时创建同一个文件
O_NOCTTY:使用本参数时,若文件为终端,那么该终端不会成为调用open()的那个进程的控制终端
O_TRUNC:若文件已经存在,那么会删除文件中的所有数据,并设置文件大小为0
O_APPEND:以添加方式打开文件,在打开文件的同时,文件指针指向文件的末尾,即将写入的数据添加到文件的末尾
perms

被打开文件的存取权限

可以用一组宏定义:S_I(R/W/X)(USR/GRP/OTH)

其中R/W/X分别表示读/写/执行权限

USR/GRP/OTH分别表示文件所有者/文件所属组/其他用户

例如,S_IRUSR|S_IWUSR表示设置文件所有者的可读可写属性。

八进制表示法中600也表示同样的权限

函数返回值

成功:返回文件描述符

失败:-1

PS:在open()函数中,flag参数可通过“|”组合构成,但前3个标志常量(O_RDONLY、O_WRONLY以及O_RDWR)不能相互组合。perms是文件的存取权限,既可以用宏定义表示法,也可以用八进制表示法。

(2)close()函数用于关闭一个被打开的文件。当一个进程终止时,所有被它打开的文件都由内核自动关闭,很多程序都使用这一功能而不显示地关闭一个文件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值