Skip to content

C stdio.h API

C standard input/output library providing file operations, formatted read/write and other core functions.

1 class · 10 methods

File I/O

10 methods

stdio.h 中的文件输入输出函数,用于打开、读写、关闭文件。

FILE *fopen(const char *filename, const char *mode)since C89

按指定模式打开文件,返回文件指针。失败时返回 NULL。

Parameters

NameTypeDescription
filenameconst char *要打开的文件路径
modeconst char *打开模式:r/w/a/r+/w+/a+,加 b 为二进制

Returns

成功返回 FILE 指针,失败返回 NULL(设置 errno)

Example

c
FILE *fp = fopen("data.txt", "r");
if (fp == NULL) {
    perror("fopen failed");
    return 1;
}
// 读取或写入...
fclose(fp);
int fclose(FILE *stream)

关闭文件流,刷新缓冲区并释放资源。

Parameters

NameTypeDescription
streamFILE *要关闭的文件指针

Returns

成功返回 0,失败返回 EOF

Example

c
FILE *fp = fopen("out.txt", "w");
if (fp) {
    fputs("hello", fp);
    if (fclose(fp) != 0) {
        perror("fclose failed");
    }
}
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream)

从文件流读取数据块到内存,常用于二进制读取。

Parameters

NameTypeDescription
ptrvoid *存储读取数据的缓冲区
sizesize_t每个元素的字节数
nmembsize_t要读取的元素个数
streamFILE *文件指针

Returns

实际读取的元素个数(可能小于 nmemb,遇到 EOF 或错误)

Example

c
FILE *fp = fopen("data.bin", "rb");
int buf[10];
size_t n = fread(buf, sizeof(int), 10, fp);
printf("读取了 %zu 个整数\n", n);
fclose(fp);
size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream)

将内存数据块写入文件流,常用于二进制写入。

Parameters

NameTypeDescription
ptrconst void *要写入的数据缓冲区
sizesize_t每个元素的字节数
nmembsize_t要写入的元素个数
streamFILE *文件指针

Returns

实际写入的元素个数(等于 nmemb 表示成功)

Example

c
int data[] = {1, 2, 3, 4, 5};
FILE *fp = fopen("data.bin", "wb");
size_t n = fwrite(data, sizeof(int), 5, fp);
printf("写入了 %zu 个整数\n", n);
fclose(fp);
char *fgets(char *s, int size, FILE *stream)

从文件流读取一行文本(最多 size-1 个字符)。

Parameters

NameTypeDescription
schar *存储读取内容的缓冲区
sizeint缓冲区大小
streamFILE *文件指针

Returns

成功返回 s,遇到 EOF 或错误返回 NULL

Example

c
FILE *fp = fopen("log.txt", "r");
char line[256];
while (fgets(line, sizeof(line), fp) != NULL) {
    printf("%s", line);
}
fclose(fp);
int fputs(const char *s, FILE *stream)

将字符串写入文件流(不追加换行符)。

Parameters

NameTypeDescription
sconst char *要写入的字符串
streamFILE *文件指针

Returns

成功返回非负数,失败返回 EOF

Example

c
FILE *fp = fopen("out.txt", "w");
if (fp) {
    fputs("第一行\n", fp);
    fputs("第二行\n", fp);
    fclose(fp);
}
int fprintf(FILE *stream, const char *format, ...)

按格式字符串将数据写入文件流。

Parameters

NameTypeDescription
streamFILE *文件指针
formatconst char *格式字符串
...可变参数要写入的数据

Returns

成功返回写入的字符数,失败返回负数

Example

c
FILE *fp = fopen("users.csv", "w");
const char *name = "Alice";
int age = 30;
fprintf(fp, "name,age\n%s,%d\n", name, age);
fclose(fp);
int fscanf(FILE *stream, const char *format, ...)

从文件流按格式字符串读取数据。

Parameters

NameTypeDescription
streamFILE *文件指针
formatconst char *格式字符串
...可变参数存储读取数据的指针

Returns

成功匹配并赋值的项数,EOF 表示读取失败或到文件尾

Example

c
FILE *fp = fopen("data.txt", "r");
char name[50];
int age;
if (fscanf(fp, "%49s %d", name, &age) == 2) {
    printf("姓名:%s 年龄:%d\n", name, age);
}
fclose(fp);
int fseek(FILE *stream, long offset, int whence)since C89

移动文件流的读写位置。

Parameters

NameTypeDescription
streamFILE *文件指针
offsetlong偏移量(字节数)
whenceint起始位置:SEEK_SET/SEEK_CUR/SEEK_END

Returns

成功返回 0,失败返回非零值

Example

c
FILE *fp = fopen("data.bin", "rb");
// 跳到文件末尾获取大小
fseek(fp, 0, SEEK_END);
long size = ftell(fp);
// 回到文件开头
fseek(fp, 0, SEEK_SET);
printf("文件大小:%ld 字节\n", size);
fclose(fp);
int feof(FILE *stream)

检测文件流是否已到达末尾。

Parameters

NameTypeDescription
streamFILE *文件指针

Returns

到达文件末尾返回非零,否则返回 0

Example

c
FILE *fp = fopen("input.txt", "r");
int ch;
while (!feof(fp)) {
    ch = fgetc(fp);
    if (ch == EOF) break;
    putchar(ch);
}
fclose(fp);