20145309信息安全系统设计基础第9周学习总结下
1.打开文件
应用程序向内核发出请求→要求内核打开相应的文件→内核返回文件描述符
文件描述符:一个小的非负整数,用来在后续对此文件的所有操作中标识这个文件。有三个已经被指定了的如下:
标准输入——0(STDIN_FILENO)
标准输出——1(STDOUT_FILENO)
标准错误——2(STDERR_FILENO)
括号中是常量表示形式,使用时需要加头文件<unistd.h>
也就是说,在Unix生命周期一开始,0、1、2就被占用,以后的open只能从3开始——习题10.1.
在UNIX下还有stdin,stdout,stderr表示同样的含义。
二者的主要区别为:
1.数据类型不同,前者为int类型,后者为FILE*;
2.STDIN_FILENO主要用在read(),write()等中,后者主要用在fread(),fwrite()以f开头。
2.改变当前的文件位置
通常,读,写操作都从当前文件偏移量处开始(也就是文件位置),并使偏移量增加所读写的字节数,可以理解为光标所在的位置。
当打开一个文件的最初时候文件的偏移量为0.
通过seek操作,可以显示的设置文件的当前位置为k。
3.读写文件
(1)读
读操作就是从文件拷贝n>0个字节到存储器,并且改变文件当前位置。(如果当前位置是k,则改变为k+n)
对于给定的m字节的文件,若k>=m时会出发一个EOF条件
- EOF的来源:
这里有一个一直以来的理解上的误区:文件结尾处没有明确的EOF信号,是当文件当前位置的数值超过了文件大小时,会处罚一个称为end-of-file的条件,能够被应用程序检测到,这就是所谓的EOF信号。
(2)写
写操作是从存储器拷贝n>0个字节到一个文件,然后更新当前文件位置。
4.关闭文件
1)当应用完成访问文件之后,通知内核关闭这个文件
2)内核释放文件打开时创建的数据结构,并将描述符恢复
.2打开和关闭文件
1.open函数
- (1)函数定义:
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int open(char *filename, int flags, mode_t mode);
-
(2)参数解析:
- 返回值:类型为int型,返回的是描述符数字,总是在进程中当前没有打开的最小描述符。如果出错,返回值为-1。
- filename:文件名
-
flags:指明进程打算如何访问这个文件,可以取的值见下:
O_RDONLY:只读 O_WRONLY:只写 O_RDWR:可读可写 O_CREAT:文件不存在,就创建新文件 O_TRUNC:如果文件存在,就截断它 O_APPEND:写操作前设置文件位置到结尾处 这些值可以用“或”连接起来。
3读和写文件
- 1.读 read
(1)函数原型:
#include <unistd.h>
ssize_t read(int fd, void *buf, size_t n);//返回有符号值
(2)参数解析:
返回值:成功则返回读的字节数,EOF返回0,出错返回-1。返回值为有符号数。
fd:文件描述符
buf:存储器位置
n:最多从当前文件位置拷贝n个字节到存储器位置buf
https://git.oschina.net/69M/LH20145309_Linux.git