C语言文件访问(Linux)

运行C程序时,Linux内核会为每个文件分配一个结构体,记录该文件的信息,该结构体可以表示为:

struct File {

缓冲区的位置(用来存放文件内容)

缓冲区中当前字符的位置

文件的读写状态

是否达到文件的结尾

......

}

所以创建一个文件指针也可以说是创建一个该结构体的指针(以下都表述为文件指针):

File *fp;

可以用fopen函数来打开一个文件,其定义如下:

File *fopen(char *name, char *mode);

该函数第一个参数是要打开的文件名,第二个参数是访问模式,"w"表示写,"r"表示只读,"a"表示追加,如果是"wb","rb",”ab"则对应的文件是二进制文件。

 

以下是一些文件访问的函数:

char getc(File *fp)

该函数返回fp所指向的输入流中当前指向的字符,并指向下一位置,如果到达文件结尾或出错,则返回EOF。

char putc(char c, File *fp)

该函数将字符写入文件中并将原本指向字符的位置移动下一位置,如果发生错误,则返回EOP。

启动一个C语言程序是,操作系统会创建3个文件,并为它们分配3个文件指针stdin,stdout,stderr,3个指针在<stdio.h>中声明。这3个文件叫标准输入文件、标准输出文件、标准错误文件。stdin指向键盘(因为对键盘进行输入时会写入该文件),stdout和stderr指向显示器。

 

现在先看两个函数:

头文件:#include <stdio.h>

函数getchar()用于从标准输入控制台(显示器)读取字符,原型如下:
int getchar(void);

【参数】该函数没有参数。

【返回值】函数的返回值为用户输入的第一个字符的ASCII码,若出错返回-1,且将用户输入的字符回显到屏幕。如果用户在按回车键之前输入了不只一个字符,其他字符会保留在键盘缓冲区中,等待后续getchar()调用读取。也就是说,后续的getchat()调用不会等待用户按键,而是直接读取缓冲区中的字符,直到缓冲区的字符读取完毕后,才等待用户按键。

 

头文件:#include <stdio.h>

函数putchar()用于将给定的字符输出到控制台(显示器),其原型如下:

int putchar (int ch);

【参数】ch为要输出的字符。

【返回值】输出成功,返回该字符的ASCII码值,否则返回EOF。

getchar()、putchar()可以通过stdin、stdout、getc()和putc()定义:

#define getchar() getc(stdin)

#define putchar() putc(stdout)

所以getchar()和putchar()实际上是宏而不是函数,同理,其实getc()和putc()也是宏。

 

下方是一个文件内容拼接的程序:

 文件指针stdin、stdout和stderr都是常量,因此不能给它们赋值。

当我们停止对文件的操作是,会调用fclose()该程序与外部文件的连接,并使其不再指向该文件(所以该指针可以重复使用)。另一个作用是将缓冲区中的内容写到文件中。实际上,程序在结束时会自动调用fclose().

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值