文件编程
1 文件描述符
在linux系统中,所有打开的文件也对应一个数字,这个数字由系统来分配,
我们称之为:文件描述符
2 函数学习
函数学习方法
对man的使用请点击下方:
2.1打开文件
2.1.1 函数名
open
2.1.2 函数原形
int open(const char *pathname,int flags)
int open(const char *pathname,int flags,mode_tmode)
2.1.3 函数功能
打开或者创建一个文件
2.1.4 所属头文件
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
2.1.5 返回值
成功:文件描述符 失败:-1
2.1.6 参数说明
pathname:要打开的文件名(含路径)
flags:文件打开的标志.
-O_APPEND:以追加的方式打开文件
-O_CREAT:当打开的文件不存在的时候,创建该文件
mode:一定是在flags中使用了O_CREAT标志,mode记录特定创建的访问权限.
2.2创建文件
2.1.1 函数名
creat
2.1.2 函数原形
int creat(const char *pathname,mode_t mode)
2.1.3 函数功能
创建一个文件,并以只写的方式打开该文件
2.1.4 所属头文件
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
2.1.5 返回值
成功:文件描述符 失败:-1
2.1.6 参数说明
pathname:创建的文件名(含路径)
mode:创建的文件的读写权限
2.3关闭文件
2.3.1 函数名
close
2.3.2 函数原形
int close(int fd)
2.3.3 函数功能
关闭一个打开的文件
2.3.4 所属头文件
#include<unistd.h>
2.3.5 返回值
成功:返回0 失败:返回1
2.3.6 参数说明
fd:待关闭的文件描述符
2.4读文件
2.4.1 函数名
read
2.4.2 函数原形
ssize_t read(int fd,void *buf,size_t count)
2.4.3 函数功能
从一个打开的文件中读取数据
2.4.4 所属头文件
#include<unistd.h>
2.4.5 返回值
成功: 返回读取了多少字节数 失败:-1
2.4.6 参数说明
fd:要读取数据的文件的描述符
count:要读取的字节数
buf:读取来的数据存到buf指向的空间
2.5写文件
2.5.1 函数名
write
2.5.2 函数原形
ssize_t write(int fd, void *buf,size_t count);
2.5.3 函数功能
向一个打开的文件写入数据
2.5.4 所属头文件
#include<unistd.h>
2.5.5 返回值
成功:返回写入到文件里的字节数
失败:返回-1
2.5.6 参数说明
fd: 要写入数据的文件的描述符
buf:要写入的数据的存放位置
count: 要写入的字节数
2.6定位文件
2.6.1 函数名
lseek
2.6.2 函数原形
off_t lseek(int fd,off_t offset,int whence)
2.6.3 函数功能
改变读写文件的偏移量
2.6.4 所属头文件
#include <sys/types.h>
#include <unistd.h>
2.6.5 返回值
成功: 返回距文件头的偏移量
失败: 返回-1
2.6.6 参数说明
fd: 要定位文件的描述符
offset:偏移量
whence:
1.如果 whence是 SEEK_SET ,文件偏移量将被设置为 offset。
2. 如果 whence 是 SEEK_CUR ,文件偏移量将被设置为 cfo 加上 offset,
offset 可以为正也可以为负。
offset为负时,偏移量从当前位置向开头方向移动offset位
offset为正时,偏移量从当前位置向结尾方向移动offset位:
3. 如果 whence 是 SEEK_END ,文件偏移量将被设置为文件长度加上 offset,
offset可以为正也可以为负。
offset为正时,偏移量从结尾位置向结尾方向移动offset位
2.7复制文件描述符
2.7.1 函数名
dup
2.7.2 函数原形
int dup(int oldfd)
2.7.3 函数功能
复制一个文件描述符
2.7.4 所属头文件
#include<unistd.h>
2.7.5 返回值
成功:返回新的文件描述符
失败:返回-1
2.7.6 参数说明
oldfd:待复制的老的文件描述符
3 实现文件复制功能
步骤:
①打开源文件
②打开目标文件
③读取源文件
④将数据写入目标文件
程序如下:
编译后执行copy命令进行测试
./mycopy s.txt ./t.txt