预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共18页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

文件操作 主讲人::李奎李奎 本章学习目标 •文件操作 在在linuxlinuxlinux系统编程中系统编程中,,通过通过linuxlinux系统调用系统调用操作文件,完成 本章学习应该能够通过linuxlinux系统调用系统调用操作文件以下部分 : •创建文件 •读和写文件 •更新文件内容 文件操作理论及原理介绍 •LinuxLinux系统调用系统调用 所谓系统调用是操作系统提供给用户程序的一组““特殊特殊” 接口,,用户程序可以通过这组用户程序可以通过这组““特殊特殊””接口来获得操作系接口来获得操作系 统内核提供的特殊服务。。在在在linuxlinux中用户程序不能直接访问 内核提供的服务,,为了更好的保护内核空间为了更好的保护内核空间,,将程序的运将程序的运 行空间分为内核空间和用户空间,,它们运行在不同的级别它们运行在不同的级别 上上,,,在逻辑上是相互隔离的在逻辑上是相互隔离的。 用户程序接口((APIAPIAPI)) 在在linuxlinuxlinux中用户编程接口中用户编程接口((APIAPIAPI)))遵循了在遵循了在UNIXUNIX中最流行的中最流行的 应用编程界面标准——POSIXPOSIXPOSIX标准标准。这些系统调用编程接口主 要通过CCC库C库库(((libc.solibc.solibc.so)))实现的实现的。 系统调用、、APIAPIAPI与系统命令之间的关系与系统命令之间的关系 文件I/OI/O函数函数 •可用的文件I/OO函数函数 打开文件、、读文件读文件、、写文件等等写文件等等。 大多数linuxlinux文件文件I/OO只需用到只需用到555个函数5个函数:openopen、、、readreadread、、 writewrite、、、lseeklseek以及closeclose。。 openopen函数函数 #include<sys/types.h> #include<sys/stat.h> #include<fcntl.h> intopen(constchar*pathname,intoflag,……/*,/*, mode_tmode*/); 返回::若成功为文件描述符若成功为文件描述符,,若出错为若出错为---1-111 文件描述符 对于内核而言,,所有打开文件都由文件描述符引用所有打开文件都由文件描述符引用。。文件文件 描述符是一个非负整数。。当打开一个现存文件或创建一个当打开一个现存文件或创建一个 新文件时,,内核向进程返回一个文件描述符内核向进程返回一个文件描述符。。当读当读、、写一写一 个文件时,,用用open返回的文件描述符标识该文件,将其 作为参数传送给read或write。 在在PPOSIX.11应用程序中应用程序中,,整数整数000、0、、1111、、、2222应被代换成符应被代换成符 号常数: STDIN_FILENO STDOUT_FILENO STDERR_FILENO 这些常数都定义在头文件<unistd.h><unistd.h>中中中。。 文件描述符的范围是0~OPEN_MAX。。早期的早期的UNIX版本 采用的上限值是19((允许每个进程打开允许每个进程打开200个文件个文件))),),现在 很多系统则将其增加至256。 openopen函数说明函数说明 参数pathname指向想要打开的文件路径字符串。 参数flags表示打开文件的方式,,例如例如: O_RDONLY以只读方式打开文件 O_WRONLY以只写方式打开文件 O_RDWR以读写方式打开文件 以上三种打开方式是互斥的,,即即即flagsflagsflags只能选择一种只能选择一种,但可 以利用’’||||’’’运算符组合运算符组合。 O_APPEND每次写时都加到文件的尾端。 O_CREAT若此文件不存在则创建它。。使用此选择项时使用此选择项时,,需需 同时说明第三个参数modemode,,,用其说明该新文件的存取许可用其说明该新文件的存取许可 权位。 O_EXCL如果同时指定了O_CREATO_CREAT,,,而文件已经存在而文件已经存在,,则出则出 错错。。。这可测试一个文件是否存在这可测试一个文件是否存在,,如果不存在则创建此文如果不存在则创建此文 件成为一个原子操作。 O_TRUNC如果此文件存在,,而且为只读或只写成功打开而且为只读或只写成功打开, 则将其长度截短为000。0。 perrorperror函数说明函数说明 #include<stdio.h> voidperror(constchar*s); 函数说明: –perrorperror函数用来将上一个函数发生的错误的原因输出到 标准错误((stderrstderrstderr)。)。参数