Linux系统编程(2)标准IO

#include<stdio.h>

标准输入输出库,位置在/usr/include/stdio.h

stdio.h-->stdio.c-->libc.so (so动态库文件/usr/lib)

FILE 结构定义的对象 FILE * 称之为流对象,也叫文件流指针。

一、fopen函数

函数作用是打开文件,函数原型为:

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

FILE*是一个指向结构体的指针。filename:这是一个指向字符串的指针,表示要打开的文件的名称。可以是相对路径或绝对路径。

  • mode:这是一个指向字符串的指针,表示打开文件的模式。常见的模式包括:
    • "r":以只读方式打开文件。文件必须存在。
    • "r+":以读写方式打开文件。文件必须存在。
    • "w":以写入方式打开文件。如果文件不存在则创建文件,如果文件存在则清空文件内容。
    • "w+":以读写方式打开文件。如果文件不存在则创建文件,如果文件存在则清空文件内容。
    • "a":以追加方式打开文件。如果文件不存在则创建文件,如果文件存在则在文件末尾追加数据。
    • "a+":以读写方式打开文件。如果文件不存在则创建文件,如果文件存在则在文件末尾追加数据。

此外,还可以在模式字符串中添加 b 以表示二进制模式,例如 "rb""wb""ab"

返回值

  • 成功时:返回一个指向 FILE 类型的指针,表示已打开的文件。
  • 失败时:返回 NULL,并设置全局变量 errno 以指示错误原因。

二、fgetc/fputc

fputcfgetc 是标准 C 库中的两个函数,用于字符的文件读写操作。它们分别用于向文件写入一个字符和从文件读取一个字符。

fputc 函数

fputc 用于向文件写入一个字符。其原型如下:

int fputc(int char, FILE *stream);
  • char:要写入的字符,作为一个整数传递。
  • stream:指向要写入的文件的文件指针。
  • 成功时返回写入的字符,失败时返回 EOF 并设置错误标志。

fgetc 函数

fgetc 用于从文件读取一个字符。其原型如下:

int fgetc(FILE *stream);

stream:指向要读取的文件的文件指针。

成功时返回读取的字符,若到达文件末尾或发生错误则返回 EOF

三、fgets/fputs

fgetsfputs 是标准 C 库中的两个函数,用于字符串的文件读写操作。它们分别用于从文件读取一行字符串和向文件写入一行字符串。

fgets 函数

fgets 用于从文件读取一行字符串。其原型如下:

char *fgets(char *str, int n, FILE *stream);
  • str:用于存储读取字符串的字符数组指针。
  • n:指定读取的最大字符数(包括终止符 \0)。 所以读取到的数量是最大字符数 - 1.
  • stream:指向要读取的文件的文件指针。
  • 成功时返回 str,若到达文件末尾或发生错误则返回 NULL

fputs 函数

fputs 用于向文件写入一行字符串。其原型如下:

int fputs(const char *str, FILE *stream);
  • str:指向要写入的字符串。
  • stream:指向要写入的文件的文件指针。
  • 成功时返回一个非负值,失败时返回 EOF

fputc/fgetc和fputs/fgets只能处理文本文件,不能处理视频图像文件

四、fread/fwrite

fwritefread 是标准 C 库中的两个函数,用于二进制文件的读写操作。

fwrite 函数

fwrite 用于将数据块写入文件。其原型如下:

size_t fwrite(const void *ptr, size_t size, size_t count, FILE *stream);
  • ptr:指向要写入数据的内存块。
  • size:每个数据块的大小,以字节为单位。
  • count:要写入的块的数量。
  • stream:指向要写入的文件的文件指针。
  • 返回成功写入的块数。如果返回值小于 count,则可能发生了错误或者到达了文件末尾。

fread 函数

fread 用于从文件读取数据块。其原型如下:

size_t fread(void *ptr, size_t size, size_t count, FILE *stream);
  • ptr:指向存储读取数据的内存块。
  • size:每个数据块的大小,以字节为单位。
  • count:要读取的块的数量。
  • stream:指向要读取的文件的文件指针。
  • 返回成功读取的块数。如果返回值小于 count,则可能发生了错误或者到达了文件末尾。

五、标准输入输出流

stdin 是标准输入流,通常与键盘输入关联。程序从 stdin 读取数据,常用于接受用户输入。

stdout 是标准输出流,通常与显示器(终端)输出关联。程序通过 stdout 将结果输出到屏幕。

stderr 是标准错误流,通常用于输出错误信息,默认也与显示器(终端)关联。与 stdout 不同,stderr 通常不会被重定向到文件,因此适合输出错误信息。

fgetc()/fputc()面试题:
如何用最短的代码实现用户任意输入并打印输出。
要求用fgetc/fputc函数实现。


while(1) 
fputc(fgetc(stdin),stdout);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值