本文主要是介绍基础I/O:C文件、系统文件I/O,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
C语言文件操作
- 文件 = 内容 + 属性
- 访问文件之前,都i需要先打开,修改文件,都是i通过执行代码的方式完成修改,文件都必须被加载到内存中
- 进程打开文件
- 一个进程可以打开多个文件
- 进程和文件的关系
- 系统中不是所有的文件都被进程打开了,被打开的文件称为内存文件,没有被打开的存放在磁盘中
一定的时间的段内,系统中存在多个和进程,也可能同时存在更多的被打开的文件,操作系统OS需要对这个多个被进程打开的文件进行管理,先描述、再组织。
内核中一定要有描述被打开文件的结构体,并且用其定义对象。
在C语言中,以w的方式也就是以只写的方式打开文件,如果文件存在,则先将文件清空之后,再进行写入。如果文件不存在,则先创建一个文件,再进行写入。
在linux中,输出重定向>
,每次写入的时候都会先清空文件,再写入,如果文件不存在则新建一个文件。
以a的方式,也就是追加的方式打开文件,如果文件不存在则创建文件,在文件的末尾写入,不清空数据
在linux中,追加重定向>>
向目标文件中,在原始文件内容的基础上追加内容,并且每次追加都会换行
NAMEfread, fwrite - binary stream input/outputSYNOPSIS#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 | 标准错误 | 显示器设备 |
NAMEstdin, stdout, stderr - standard I/O streamsSYNOPSIS#include <stdio.h>extern FILE *stdin;extern FILE *stdout;extern FILE *stderr;
- FILE:C标准库封装的结构体,这个结构体中一定封装特定的fd。
访问文件不仅需要在C语言上有文件接口,操作系统OS中必须提供对应的访问文件的系统调用。
这篇关于基础I/O:C文件、系统文件I/O的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!