标准IO函数 文件IO中的open函数 5.10

5.10

标准IO

位于用户空间,是C库函数

是带缓存的IO操作----缓存的目的是提高程序的效率

FILE *:文件指针 指向内存中存放操作的文件信息的结构体

stream:流指针

文本流:操作数据是字符(ASCII)

二进制流:操作的数据是 0 1 二进制

全缓存:使用fflush、缓存区满、满足一定情况下

行缓存:遇见’\n’、fflush、缓存区满了,满足一定情况

​ 典型的行缓存:stdout 标准输出流

无缓存:stderr

缓存类型设置的函数:setbuf

setbuf(stdout,NULL) :

关闭行缓存后会自动刷新(前面和后面的都会刷新出来)

fprintf

fprintf(FILE *fp,const char * format,…);

功能:将数据按照某种格式输出到指定的输出流中

sprintf

sprintf :项目中用于数据的组装

sprintf(char *s,const char *format,…);

功能:将数据按照某种格式输出到用户指定的缓冲区s中

snprintf

snprintf(char *s,size_t size,const char *format,…);

功能:数据按照某种格式,将前size个字节数据输出到 指定缓冲区中

fscanf

fscanf(FILE *fp,const char *format,…);

功能:将fp流中的数据 按照某种格式输入到 用户自定义的缓存中

sscanf

sscanf:项目中用于数据的拆解

sscanf(const char *s,const char *format,…);

功能:将缓冲区s中的数据 按照某种格式输入到 用户自定义的缓存中

打开或者创建文件,获得文件流指针

FILE *fopen(const char *path,const char *mode);

​ 参数:

​ char buf[21]= “file.txt” ;可以传进一个数组

​ const char *p = “file.txt”;

​ path:待操作的文件名(包含路径)

​ mode:文件的操作方式(权限)r\r+ w\w+ a\a+

​ 返回值:

​ 成功:内存中存储文件信息的结构体首地址(文件指针)

​ 失败:NULL,设置错误信息,perror

fclose

关闭文件流

int fclose(FILE *stream);

注意:

​ 文件流被真正关闭之前,会自动刷新 流缓存。

一次读取一个字节的函数

int getc(FILE *stream);

int fgetc(FILE *stream);

功能:

​ 从stream流中读取一个字节的数据,返回下一个字节。

注意:

​ 1.getc 为宏函数;fgetc:为C库函数

​ 2.两函数出错 和 文件流末尾都返回 EOF

​ feof(); 判断是否都到末尾

​ ferror();判断是否出错

​ 3.当读取文件中一个字节数据时,磁盘文件的文件指针 将会向后偏移一个字节

一次写入一个字符的函数

int putc(int c,FILE *stream);

int fputc(int c,FILE *stream);

功能:

​ 将c对应的字符,写入stream流中

返回值:

​ 成功:返回写入的字符的ascii值

​ 失败:返回EOF,并设置错误信息

注意:

​ putc 为宏函数;fputc:为C库函数

一次操作一行的函数(读一行、写一行)

char *fgets(char *s,int size,FILE *stream);

功能:

​ 从stream中的一行读取前size个字节的数据到缓存区s

参数:

​ s:缓存区首地址

​ size:一行中读取的字节数

​ stream:指定的文件流

返回值:

​ 成功:缓存区首地址

​ 失败:NULL

​ 文件末尾:NULL

注意:

1.fgets函数读取一行前size个字节数 >= 一行的真实数据长度,则遇见’\n’就结束返回

2.当size < 一行的真实数据长度,则实际读取size-1个数据,下一次将读取该行剩下的数据

使用fputs函数实现文件拷贝

int fputs(const char *s,FILE *stream);

一次操作一个结构数据

文本流:

一次操作一个文本的字符

二进制流:

一次操作一个结构体

size_t fread(void *ptr,size_t size,size_t nmemb,FILE *stream);

功能:

​ 从stream 流中 读取nmemb 个size大小的数据到ptr缓冲区

参数:

​ ptr : 缓冲区首地址

​ size:每个对象(结构体)的大小

​ nmemb :要读取的对象个数

​ stream : 流指针

返回值:

​ 成功:实际读取的对象个数

​ 失败:EOF,并设置错误信息

​ 末尾:0

注意:

​ 1.当读取的对象数,不满足整数时向下取整

size_t fwrite(const void *ptr,size_t size,size_t nmemb,FILE *stream);

功能:

​ 将 ptr缓冲区前 nmemb 个size大小的数据,写入 stream流中。

参数:

​ ptr:缓冲区首地址
​ size :每个对象(结构)的大小
​ nmemb :要写入的对象个数
​ stream : 流指针

返回值:

​ 成功:实际写入的对象个数
​ 失败:EOF,并设置错误信息

注意:

​ 1、当写入的数据不足一个对象,向上取整。

文件内部指针的偏移、定位

int fseek(FILE *stream,long offset,int whence);

功能:

​ 让 stream流中的指针 以whence为基准点 偏移offset个字节

参数:

​ stream:文件流指针

​ offset:偏移量

​ whence:基准点(SEEK_SET:文件头部起始位置 SEEK_CUR:文件当前位置 SEEK_END:文件尾部)

返回值:

​ 成功:0

​ 失败:-1 并设置错误信息

long ftell(FILE *stream);

功能:

​ 定位 stream流中的指针位置

参数:

​ stream:文件流指针

返回值:

​ 成功:文件指针在当前文件中的位置编号

​ 失败:-1 并设置错误信息

文件IO

不带缓存的IO操作,是系统调用一部分

文件描述符:

内核向进程返回的编号,用来标识正在操作的文件

是系统最小的、未用的非负整数

所有文件IO操作,都通过文件描述符012进行

文件IO相关接口

1.int open(const char *path,int oflags);

功能:

​ 以oflags方式打开path对应的文件,得到文件的文件描述符

头文件:

​ #include

​ #include

​ #include

参数:

​ path:待操作的文件名(包含路径)

​ oflags:文件的打开方式(只读O_RDONLY,只写O_WRONLY,读写O_RDWR,不存在就创建O_CREAT,追加方式O_APPEND)

返回值:

​ 成功:返回文件描述符

​ 失败:返回-1.并设置错误信息

2.int open(const char *path,int oflags,mode_t mode);

功能:

​ 以oflags方式打开path对应的文件,得到文件的文件描述符

头文件:

​ #include

​ #include

​ #include

参数:

​ path:待操作的文件名(包含路径)

​ oflags:文件的打开方式(只读O_RDONLY,只写O_WRONLY,读写O_RDWR,不存在就创建O_CREAT,追加方式O_APPEND)

​ mode:文件的存根权限(八进制表示),该参数必须依赖O_CREAT才生效

返回值:

​ 成功:返回文件描述符

​ 失败:返回-1.并设置错误信息

gs,mode_t mode);

功能:

​ 以oflags方式打开path对应的文件,得到文件的文件描述符

头文件:

​ #include

​ #include

​ #include

参数:

​ path:待操作的文件名(包含路径)

​ oflags:文件的打开方式(只读O_RDONLY,只写O_WRONLY,读写O_RDWR,不存在就创建O_CREAT,追加方式O_APPEND)

​ mode:文件的存根权限(八进制表示),该参数必须依赖O_CREAT才生效

返回值:

​ 成功:返回文件描述符

​ 失败:返回-1.并设置错误信息

你可能感兴趣的:(IO进程管理,c++,缓存,服务器)