首页 > 代码库 > 20145309信息安全系统设计基础第9周学习总结下

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

 

20145309信息安全系统设计基础第9周学习总结下