20145334 《信息安全系统设计基础》第10周学习总结

open函数:打开一个已存在的文件或者创建一个新文件

#include <sys/types.h>
    #include <sys/stat.h>
    #include <fcntl.h>

    int open(char *filename,int flags,mode_t mode);

open函数将filename转换为一个文件描述符,并且返回描述符数字。
返回的描述符总是在进程中当前没有打开的最小描述符。

O_ RDONLY :只读 
O_ WRONLY :只写 
O_ RDWR :可读可写

flag参数可以是一个或多个更多位掩码

O_ CREAT:如果文件不存在,就创建它的一个截断的空文件
O_ TRUNC:如果文件已经存在,就截断它 
O_ APPEND:在每次写操作前,设置文件位置到文件的结尾处

应用程序是通过分别调用read和write函数来执行输入和输出的

#include <unistd.h>
ssize_t read(int fd,void *buf,size_t n);
ssize_t write(int fd,const void *buf,size_t n);

用RIO包健壮地读写
RIO包的实质:I/O包

RIO包提供的两种函数:

无缓冲的输入输出函数、带缓冲的输入函数(线程安全)
应用程序通过调用rioreadn和riowritten函数可以在存储器和文件之间直接传送数据

#include "csapp.h"
ssize_t rio_readn(int fd,void *usrbuf,size_t n);
ssize_t rio_writen(int fd,void *usrbuf,size_t n);

读取文件元数据
检索文件信息(元数据):应用程序能够通过调用stat和fstat函数

#include <unistd.h>
#include <sys/stat.h>
int stat(const char *filename,struct stat *buf);
int fstat(int fd,struct stat *buf);

stat函数以一个文件名作为输入,填写一个stat数据结构中的各个成员。
fstat函数以文件描述符而不是文件名作为输入。
st_ size成员包含了文件的字节数大小。
st_ mode成员则编码了文件访问许可位和文件类型。
文件类型包括:
普通文件:某种类型的二进制或文本数据。
目录文件:关于其他文件的信息。
套接字:一种用来通过网络与其他进程通信的文件。

宏指令:根据st_mode成员来确定文件的类型
在sys/stat.h中定义:

S_ ISREG():这是一个普通文件吗? 
S_ ISDIR():这是一个目录文件吗? 
S_ ISSOCK():这是一个网络套接字吗?

Unix外壳提供了I/O重定向操作符,允许用户将磁盘文件和标准输入输出联系起来。

unix> ls > foo.txt

标准I/O
标准I/O库将一个打开的文件模型化为一个流,一个流就是一个指向FILE类型的结构的指针。每个ANSIC程序开始都有三个打开的流stdin、stdout和stderr,分别对应于标准输入、标准输出、标准错误。

#include <stdio.h>
extern FILE *stdin;
extern FILE *stdout;
extern FILE *stderr;







posted @ 2016-11-16 16:27  20145334赵文豪  阅读(138)  评论(1编辑  收藏  举报