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

2024-05-11 01:20
文章标签 基础 系统文件

本文主要是介绍基础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的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/978108

相关文章

从基础到进阶详解Pandas时间数据处理指南

《从基础到进阶详解Pandas时间数据处理指南》Pandas构建了完整的时间数据处理生态,核心由四个基础类构成,Timestamp,DatetimeIndex,Period和Timedelta,下面我... 目录1. 时间数据类型与基础操作1.1 核心时间对象体系1.2 时间数据生成技巧2. 时间索引与数据

安装centos8设置基础软件仓库时出错的解决方案

《安装centos8设置基础软件仓库时出错的解决方案》:本文主要介绍安装centos8设置基础软件仓库时出错的解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录安装Centos8设置基础软件仓库时出错版本 8版本 8.2.200android4版本 javas

Linux基础命令@grep、wc、管道符的使用详解

《Linux基础命令@grep、wc、管道符的使用详解》:本文主要介绍Linux基础命令@grep、wc、管道符的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录grep概念语法作用演示一演示二演示三,带选项 -nwc概念语法作用wc,不带选项-c,统计字节数-

python操作redis基础

《python操作redis基础》Redis(RemoteDictionaryServer)是一个开源的、基于内存的键值对(Key-Value)存储系统,它通常用作数据库、缓存和消息代理,这篇文章... 目录1. Redis 简介2. 前提条件3. 安装 python Redis 客户端库4. 连接到 Re

SpringBoot基础框架详解

《SpringBoot基础框架详解》SpringBoot开发目的是为了简化Spring应用的创建、运行、调试和部署等,使用SpringBoot可以不用或者只需要很少的Spring配置就可以让企业项目快... 目录SpringBoot基础 – 框架介绍1.SpringBoot介绍1.1 概述1.2 核心功能2

Spring Boot集成SLF4j从基础到高级实践(最新推荐)

《SpringBoot集成SLF4j从基础到高级实践(最新推荐)》SLF4j(SimpleLoggingFacadeforJava)是一个日志门面(Facade),不是具体的日志实现,这篇文章主要介... 目录一、日志框架概述与SLF4j简介1.1 为什么需要日志框架1.2 主流日志框架对比1.3 SLF4

Spring Boot集成Logback终极指南之从基础到高级配置实战指南

《SpringBoot集成Logback终极指南之从基础到高级配置实战指南》Logback是一个可靠、通用且快速的Java日志框架,作为Log4j的继承者,由Log4j创始人设计,:本文主要介绍... 目录一、Logback简介与Spring Boot集成基础1.1 Logback是什么?1.2 Sprin

MySQL复合查询从基础到多表关联与高级技巧全解析

《MySQL复合查询从基础到多表关联与高级技巧全解析》本文主要讲解了在MySQL中的复合查询,下面是关于本文章所需要数据的建表语句,感兴趣的朋友跟随小编一起看看吧... 目录前言:1.基本查询回顾:1.1.查询工资高于500或岗位为MANAGER的雇员,同时还要满足他们的姓名首字母为大写的J1.2.按照部门

Android Mainline基础简介

《AndroidMainline基础简介》AndroidMainline是通过模块化更新Android核心组件的框架,可能提高安全性,本文给大家介绍AndroidMainline基础简介,感兴趣的朋... 目录关键要点什么是 android Mainline?Android Mainline 的工作原理关键

mysql的基础语句和外键查询及其语句详解(推荐)

《mysql的基础语句和外键查询及其语句详解(推荐)》:本文主要介绍mysql的基础语句和外键查询及其语句详解(推荐),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋... 目录一、mysql 基础语句1. 数据库操作 创建数据库2. 表操作 创建表3. CRUD 操作二、外键