1.文件操作
[1].打开
[2].读写 -- 文件的定位
[3].关闭
程序实现方式 两种
[1].库函数 (stdio)
[2].系统调用(文件IO的内容)
stdio:
1.打开 fopen
2.读写
fgetc fputc
fgets fputs ---- 定位 : fseek ftell rewind
fread fwrite
3.关闭
fclose
标准IO的操作对象是:
FILE *fp <---流-->文件
(流指针)
文件iO的操作对象:
文件描述符<-------->文件
文件描述符:
[1].是一个非负的数值(>=0)
[2].文件描述符用来标示一个"已打开的文件"
[3].文件描述符的分配的原则:
最小未使用
[4].系统默认已经打开了三个文件,这个三个文件
stdin stdout stderr
0 1 2
--------------------------------------------
文件IO:
[1].打开 -- open
[2].读写 -- read/write
[3].关闭 -- close
-----------------------------
[1].打开 -- open
int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);
功能: 打开文件
参数:
@pathname 要打开的文件的名字 (字符串)
@flags 打开的标志
[必选]
O_RDONLY
O_WRONLY
O_RDWR
必选项有且只能有一个
[可选]
O_APPEND //追加模式打开
O_CREAT //文件不存在时,则创建
O_EXCL //与 O_CREAT连用 ,可以实现对已存在文件的探测
O_TRUNC //截短成0
@mode 指定打开的文件的权限(0666) (当 flags中有 O_CREAT 标志时 ,则需要制定这个权限)
返回值:
成功 文件描述符
失败 -1&errno
标准IO 文件IO
-------------------------------------------------
r O_RDONLY
r+ O_RDWR
w O_WRONLY|O_CREAT|O_TRUNC , 0666
w+ O_RDWR |O_CREAT|O_TRUNC , 0666
a O_WRONLY|O_APPEND|O_CREAT, 0666
a+ O_RDWR |O_APPEND|O_CREAT, 0666
注:
linux 中 一切皆文件 思想
[1].操作系统角度
把接入到系统中的设备当做文件对待
[2].编程角度
类似文件的操作流程(a.打开 b.读写 c.关闭)
练习:
使用open函数实现文件创建
类似touch的功能;
之后查看文件的权限
ls -l hello.c
-rw- rw- r-- 1 ubuntu ubuntu 199 Jun 12 20:40 hello.c
4 2 1
r w x ----> 111 (二进制) --> 7(八进制)
读 写 可执行
6(八进制) ---> 110 -->rw 权限
文件掩码(掩码 就是使某些位 有效,某些位无效):
0666 & (~umask)
110 110 110
0002 ---> 111 111 101 &
---------------
110 110 100
6 6 4
[2].读写 -- read/write (数据流向)
ssize_t read (int fd, void *buf, size_t count);
ssize_t write(int fd, const void *buf, size_t count);
参数:
@fd 文件对应的描述符
@buf 保存数据的内存首地址
@count 表示一次期望操作的字节数
返回值:
成功 表示成功操作到的字节数
失败 -1 & errno
0 读:表示文件末尾
写:表示没有任何数据写入
读写过程中:
定位
lseek(); //off_t ==> long int数值
off_t lseek(int fd, off_t offset, int whence);
参数:
@fd 要定位的文件
@offset 文件偏移量
@whence 相对的偏移起点
SEEK_SET //文件的开头
SEEK_CUR //文件的当前位置
SEEK_END //文件的末尾
返回值:
成功 返回从文件开头到偏移位置的偏移量
失败 -1 &errno
获得文件大小:
long len ;
len = lseek(fd,0,SEEK_END);
同样的,该函数也可以实现空洞文件的创建
创建空洞文件:
lseek(fd,len-1,SEEK_SET);
write(fd,"",1);//这里写入的数据是一个字符'\0'
[3].关闭 -- close
int close(int fd);
练习:
使用 文件io的函数,实现文件拷贝的功能
改进:
将拷贝程序实现成类似迅雷的方式
[1].打开
[2].读写 -- 文件的定位
[3].关闭
程序实现方式 两种
[1].库函数 (stdio)
[2].系统调用(文件IO的内容)
stdio:
1.打开 fopen
2.读写
fgetc fputc
fgets fputs ---- 定位 : fseek ftell rewind
fread fwrite
3.关闭
fclose
标准IO的操作对象是:
FILE *fp <---流-->文件
(流指针)
文件iO的操作对象:
文件描述符<-------->文件
文件描述符:
[1].是一个非负的数值(>=0)
[2].文件描述符用来标示一个"已打开的文件"
[3].文件描述符的分配的原则:
最小未使用
[4].系统默认已经打开了三个文件,这个三个文件
stdin stdout stderr
0 1 2
--------------------------------------------
文件IO:
[1].打开 -- open
[2].读写 -- read/write
[3].关闭 -- close
-----------------------------
[1].打开 -- open
int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);
功能: 打开文件
参数:
@pathname 要打开的文件的名字 (字符串)
@flags 打开的标志
[必选]
O_RDONLY
O_WRONLY
O_RDWR
必选项有且只能有一个
[可选]
O_APPEND //追加模式打开
O_CREAT //文件不存在时,则创建
O_EXCL //与 O_CREAT连用 ,可以实现对已存在文件的探测
O_TRUNC //截短成0
@mode 指定打开的文件的权限(0666) (当 flags中有 O_CREAT 标志时 ,则需要制定这个权限)
返回值:
成功 文件描述符
失败 -1&errno
标准IO 文件IO
-------------------------------------------------
r O_RDONLY
r+ O_RDWR
w O_WRONLY|O_CREAT|O_TRUNC , 0666
w+ O_RDWR |O_CREAT|O_TRUNC , 0666
a O_WRONLY|O_APPEND|O_CREAT, 0666
a+ O_RDWR |O_APPEND|O_CREAT, 0666
注:
linux 中 一切皆文件 思想
[1].操作系统角度
把接入到系统中的设备当做文件对待
[2].编程角度
类似文件的操作流程(a.打开 b.读写 c.关闭)
练习:
使用open函数实现文件创建
类似touch的功能;
之后查看文件的权限
ls -l hello.c
-rw- rw- r-- 1 ubuntu ubuntu 199 Jun 12 20:40 hello.c
4 2 1
r w x ----> 111 (二进制) --> 7(八进制)
读 写 可执行
6(八进制) ---> 110 -->rw 权限
文件掩码(掩码 就是使某些位 有效,某些位无效):
0666 & (~umask)
110 110 110
0002 ---> 111 111 101 &
---------------
110 110 100
6 6 4
[2].读写 -- read/write (数据流向)
ssize_t read (int fd, void *buf, size_t count);
ssize_t write(int fd, const void *buf, size_t count);
参数:
@fd 文件对应的描述符
@buf 保存数据的内存首地址
@count 表示一次期望操作的字节数
返回值:
成功 表示成功操作到的字节数
失败 -1 & errno
0 读:表示文件末尾
写:表示没有任何数据写入
读写过程中:
定位
lseek(); //off_t ==> long int数值
off_t lseek(int fd, off_t offset, int whence);
参数:
@fd 要定位的文件
@offset 文件偏移量
@whence 相对的偏移起点
SEEK_SET //文件的开头
SEEK_CUR //文件的当前位置
SEEK_END //文件的末尾
返回值:
成功 返回从文件开头到偏移位置的偏移量
失败 -1 &errno
获得文件大小:
long len ;
len = lseek(fd,0,SEEK_END);
同样的,该函数也可以实现空洞文件的创建
创建空洞文件:
lseek(fd,len-1,SEEK_SET);
write(fd,"",1);//这里写入的数据是一个字符'\0'
[3].关闭 -- close
int close(int fd);
练习:
使用 文件io的函数,实现文件拷贝的功能
改进:
将拷贝程序实现成类似迅雷的方式