基础I/O:C文件、系统文件I/O

C语言文件操作

  • 文件 = 内容 + 属性
  • 访问文件之前,都i需要先打开,修改文件,都是i通过执行代码的方式完成修改,文件都必须被加载到内存中
  • 进程打开文件
  • 一个进程可以打开多个文件
  • 进程和文件的关系
  • 系统中不是所有的文件都被进程打开了,被打开的文件称为内存文件,没有被打开的存放在磁盘中

一定的时间的段内,系统中存在多个和进程,也可能同时存在更多的被打开的文件,操作系统OS需要对这个多个被进程打开的文件进行管理,先描述、再组织。
内核中一定要有描述被打开文件的结构体,并且用其定义对象。

在C语言中,以w的方式也就是以只写的方式打开文件,如果文件存在,则先将文件清空之后,再进行写入。如果文件不存在,则先创建一个文件,再进行写入。
在linux中,输出重定向>,每次写入的时候都会先清空文件,再写入,如果文件不存在则新建一个文件。

以a的方式,也就是追加的方式打开文件,如果文件不存在则创建文件,在文件的末尾写入,不清空数据
在linux中,追加重定向>>向目标文件中,在原始文件内容的基础上追加内容,并且每次追加都会换行

NAME
       fread, fwrite - binary stream input/output

SYNOPSIS
       #include <stdio.h>

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

       size_t fwrite(const void *ptr, size_t size, size_t nmemb,
                     FILE *stream);
  • fread()
    • 从stream所指向的流中读取nmemb个数据元素,每个元素长度未size个字节大小,并将它们存储在ptr所指向的位置。
  • fwrite()
    • 将数据的nmemb个元素,每个元素size个字节大小,写入到stream指向的流,从ptr所指向的位置获取。
  • 返回值
    • 如果成功,则fread和fwrite返回已经读或已写的项数。只有当size未1时,这个数字才等于传输的字节数。如果发生错误,或者到达文件的末尾,则返回值是一个短项目计数或者0.
  • fread不区分文件结束、错误、调用者。

系统文件I/O

访问文件不仅需要C语言上的文件的接口,操作系统必须提供对应的访问文件的系统调用。

位图/宏传参

#include<stdio.h>

#define ONE 1
#define TWO (1<<1)
#define THREE (1<<2)
#define FOUR (1<<3)
#define FIVE (1<<4)

void print(int flag)
{
	if(flag && ONE)
		printf("1\n");
		
	if(flag && TWO)
		printf("2\n");
		
	if(flag && THREE)
		printf("3\n");
		
	if(flag && FOUR)
		printf("4\n");
		
	if(flag && FIVE)
		printf("5\n");
}

int main()
{
	print(ONE);
	print(ONE|FOUR);
	printf(ONE|TWO|THREE|FOUR|FIVE);
	return 0;
}
  • 当前路径:进程启动的时候,会自动记录自己启动试的所在路径
  • 程序默认打开的文件流
文件流
stdin标准输入键盘设备
stdout标准输出显示器设备
stderr标准错误显示器设备
NAME
       stdin, stdout, stderr - standard I/O streams

SYNOPSIS
       #include <stdio.h>

       extern FILE *stdin;
       extern FILE *stdout;
       extern FILE *stderr;
  • FILE:C标准库封装的结构体,这个结构体中一定封装特定的fd。

访问文件不仅需要在C语言上有文件接口,操作系统OS中必须提供对应的访问文件的系统调用。

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

排骨炖粉条

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值