UNIX环境高级编程学习之路(一)----文件I/O

本文详细介绍了UNIX环境高级编程中的文件I/O,包括open、read、write、lseek、close等核心函数的使用,以及文件描述符、文件偏移量等概念。通过对这些基本操作的学习,可以更好地理解和掌握UNIX系统中的文件操作。文章还讨论了文件共享、原子操作、同步函数等高级主题,旨在帮助读者系统地整理和巩固UNIX编程知识。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

对于UNIX环境编程,工作中经常会用到相关知识,作为学习UNIX环境编程的经典书籍--UNIX环境高级编程,是每个UNIX编程人员必看的经典书籍之一,为了将相关知识重新进行学习,以系统的整合所学知识,遂以博文形式作为总结。

一、概述
    Unix系统可用的文件I/O函数--打开文件,读文件,写文件等,大多数文件I/O只需用到5个函数:open、read、write、lseek、close;
以上的函数被称为不带缓冲的I/O(unbuffered I/O),不带缓冲指的是每个read和write都调用内核的一个系统调用。
文件描述符是一个非负整数,当打开一个现有文件或新建一个文件时,内核向进程返回一个文件描述符。读写文件时,使用open或create返回的文件描述符标识这个文件,在Unix系统中,fd(0)进程的标准输入,fd(1)进程的标准输出,fd(2)进程的标准出错输出,这是很多shell以及很多程序使用的惯例而与Unix内核无关。

二、open()函数
调用open函数可以打开或者创建一个文件
#include <fcntl.h>
int open(const char* pathname,int oflag,..../*mode_t mode*/); 
返回值:成功的话返回fd,出错返回-1
对于open而言,仅当创建新文件时才使用第三个参数。
pathname是要打开或者创建文件的名字,oflag参数如下:
O_RDONLY(只读打开) O_WRONLY(只写打开) O_RDWR(读、写打开),
以上三个参数必须指定且只能指定一个,下面的常量则是可选的:
O_APPEND    每次写时都追加到文件的尾端;
O_CREATE    若此文件不存在时,则创建他,使用此选项时,需要第三个参数mode,来指定新建文件的访问权限位;
O_EXCL         如果同时指定了O_CREATE,而文件已经存在,则会出错;用此可以检测一个文件是否存在,如果不存在,则创建此文件,这使测试和创建两者成为一个原子操作;
O_TRUNC     如此文件存在,而且只为写或读写成功打开,则将其长度截短为0;
O_NOCTTY   如果pathname指的是终端设备,则不将该设备分配作为此进程的控制终端;
O_NONBLOCK 如果pathname指的是一个FIFO,一个块特殊设备或一个字符特殊文件,此选项为文件的本次打开操作和后续的I/O操作设置为非阻塞模式;

三、create函数
可以调用create函数创建一个新的文件
#include<fcntl.h>
int create(const char *pathname, mode_t mode);
返回值:如果成功返回为只写打开的fd,若出错则返回-1
此函数等效于:
open(pathname,O_WRONLY | O_CREATE | O_TRUNC,mode);
create的一个不足之处是他以只写方式打开所创建的文件。

四、close函数
可调用close函数关闭一个打开的文件
#include <fcntl.h>
int close (int filedes);
当一个进程终止时,内核自动关闭它所有打开的文件。

五、lseek函数
每一个打开的文件都有一个与其相关联的“当前文件偏移量”,它通常是一个非负整数,通常,读写操作都是从文件开始处计算的字节数,并使偏移量增加所读写的字节数。
可以调用lseek显式的为一个打开的文件设置其偏移量。
#include <unistd.h>
off_t lseek(int filedes,off_t offset,int whence);
返回值:若返回则返回新的文件偏移量,若出错则返回-1;
whence的值通常为如下值:
SEEK_SET:偏移量设置为距文件开始处offset个字节
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值