0%

C语言-size-t-fopen-feof-fgets

三个 C 语言的函数/类型

size_t

size_t 是无符号整型,在<stddef.h>标准头中可以找到定义,真实面目是long unsigned int类型。

1
2
#define __SIZE_TYPE__ long unsigned int
typedef __SIZE_TYPE__ size_t;
fopen

fopen() 位于<stdio.h>标准头中,用来打开文件

1
2
FILE *fopen(char *filename, char *mode);
FILE* cpu_info = fopen("/proc/cpuinfo", "rb");

fopen() 会获取文件信息,包括文件名、文件状态、当前读写位置等,并将这些信息保存到一个 FILE 类型的结构体变量中,然后将该变量的地址返回。

cat /proc/cpuinfo 是linux系统查看cpu信息的命令

FILE* 是<stdio.h>内的一个结构体,用来保存文件信息。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#ifndef _FILE_DEFINED
struct _iobuf {
    char *_ptr; //文件输入的下一个位置
    int _cnt; //当前缓冲区的相对位置
    char *_base; //指基础位置(即是文件的起始位置)
    int _flag; //文件标志
    int _file; //文件描述符id
    int _charbuf; //检查缓冲区状况,如果无缓冲区则不读取
    int _bufsiz; //文件缓冲区大小
    char *_tmpfname; //临时文件名
};
typedef struct _iobuf FILE;
#define _FILE_DEFINED
#endif

打开文件出错时,fopen会返回一个空指针,NULL

fclose()

fclose()用来关闭文件,int fclose(FILE* fp),文件正常关闭时,返回0,返回非零表示有错误发生

feof

位于<stdio.h>, 使用方法: int feof(FILE *fp);,函数feof只用于检测流文件,当文件内部位置指针指向文件结束时,并未立即置位 FILE 结构中的文件结束标记,只有再执行一次读文件操作,才会置位结束标志,此后调用 feof 才会返回为真。

若成功则返回非零值,失败返回0值,用于判断是否到达了文件末尾。

fgets

位于<stdio.h>中,用法是char *fgets(char *s, int size, FILE *stream);它的功能是从 stream 流中读取 size 个字符存储到字符指针变量 s 所指向的内存空间。它的返回值是一个指针,指向字符串中第一个字符的地址。

fget() 函数中的 size 如果小于字符串的长度,那么字符串将会被截取;如果 size 大于字符串的长度则多余的部分系统会自动用 ‘\0’ 填充。

但是需要注意的是,如果输入的字符串长度没有超过 n–1,那么系统会将最后输入的换行符 ‘\n’ 保存进来,保存的位置是紧跟输入的字符,然后剩余的空间都用 ‘\0’ 填充。所以此时输出该字符串时 printf 中就不需要加换行符 ‘\n’ 了,因为字符串中已经有了。