首页 > 系统相关 >IO进程_day1

IO进程_day1

时间:2024-10-20 23:47:05浏览次数:3  
标签:文件 缓存 IO stream day1 FILE 进程 返回值 size

目录

概要

标准IO

1.概念:

2.特点:

3.缓存区

3.1行缓存:和终端操作相关

3.2全缓存:和文件操作相关

​​​​​​​3.3不缓存:标准错误 stderr

4.函数

​​​​​​​4.1打开文件

​​​​​​​4.2关闭文件

​​​​​​​4.3读写文件

​​​​​​​4.3.1每次一个字符的读写

fgetc

fputc

​​​​​​​4.3.2每次一个字符串的读写

fgets

fputs

​​​​​​​4.3.3二进制读写文件

fread

fwrite

​​​​​​​4.4文件定位操作

rewind

fseek

ftell


概要

IO:

标准IO

文件IO

文件属性获取

目录操作

库:静态库、动态库

进程:

进程

线程

进程间的通信:7种 6

面向应用,学习大量函数 70左右,功能、参数、返回值,man手册

标准IO

文件类型

b s p -(普通文件) l c d

1.概念:

在C库中定义的一组用于输入输出的函数

2.特点:

  1. 有缓存区(缓冲机制),通过缓冲机制减少系统调用的次数,提高效率

补充:系统调用:内核向上提供的一组接口

  1. 围绕流进行操作,流用FILE*来描述,FILE代表的是结构体,描述所操作文件的信息
  2. 默认打开了三个流:stdin(标准输入)、stdout(标准输出)、stderr(标准错误)

补充:sudo ctags -R的使用(可以追代码)

vi -t FILE(typedef定义数据类型、宏定义、结构体等)

选择合适的编号

将光标定位在目标位置,ctrl+] :向下追代码

ctrl+t:回退

q:退出

3.缓存区

3.1行缓存:和终端操作相关

刷新缓存的条件:

  1. 程序正常退出
  2. \n刷新
  3. 缓存区满

除了这种验证缓存区大小之外还有其他的验证方式

   4.强制刷新 fflush

​​​​​​​3.2全缓存:和文件操作相关

刷新缓存条件:

  1. 程序正常退出
  2. 缓存区满刷新
  3. 强制刷新 fflush

​​​​​​​3.3不缓存:标准错误 stderr

4.函数

​​​​​​​4.1打开文件

#include <stdio.h>
FILE *fopen(const char *path, const char *mode);
参数:
    path:打开文件
    mode:打开方式
        r:只读,流被定位到文件开头
        r+:可读可写,流被定位到文件开头
        w:只写,文件不存在创建,文件存在清空,流被定位到文件开头
        w+:可读可写,文件不存在创建,文件存在清空,流被定位到文件开头
        a:追加,文件不存在创建存在追加,流被定位到文件末尾
        a+:可读可写,文件不存在创建,存在追加,开始进行读时从头读,进行写时流被定位到文件末尾
返回值:成功:文件流
       失败:NULL,并且设置errno(错误码)

示例:

​​​​​​​4.2关闭文件

#include<stdio.h>
int fclose(FILE* stream);
功能:关闭文件
参数:stream:文件流

示例:

​​​​​​​4.3读写文件

​​​​​​​4.3.1每次一个字符的读写

fgetc
#include <stdio.h>
int fgetc(FILE *stream);
功能:从文件中读一个字符
参数:stream:文件流
返回值:成功:读到字符
       失败或读到文件末尾:EOF(-1)

示例:

补充:

#include <stdio.h>
int ferror(FILE *stream);
功能:判断读文件时是否出错
返回值:非0表示出错

int feof(FILE *stream);
功能:判断读文件时是否到文件末尾
返回值:非0表示读到文件末尾

示例:

fputc
#include <stdio.h>
int fputc(int c, FILE * stream)
功能:向文件中写入一个字符
参数:c:要写的字符
   stream:文件流
返回值:成功:写的字符的ASCII
      失败:EOF

示例:

​​​​​​​4.3.2每次一个字符串的读写

fgets
#include <stdio.h>
char *fgets(char *s, int size, FILE *stream);
功能:从文件中读取一串字符
参数:s:存放读取的字符串的首地址
     size:读取的大小
     stream:文件流
返回值:成功:读取的字符串的首地址
      失败或读到文件末尾:NULL
      
特性:1.一次调用最多读取一行数据
     2.实际读到个数为size-1个,末尾自动添加\0

示例:

fputs
#include <stdio.h>
int  fputs(const char *s,  FILE *stream);
功能:向文件中写字符串
参数:s:要写的内容
    stream:文件流
返回值:成功:非负整数
       失败:EOF

​​​​​​​4.3.3二进制读写文件

可以读写任意类型的数据,以二进制的方式进行读写

fread
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
功能:从文件流读取多个元素
参数:	ptr :用来存放读取元素 (可以用来读取任意类型的数据)
        size :元素大小  sizeof(数据类型)
		nmemb :读取对象的个数
		stream :要读取的文件
返回值:成功:读取对象的个数
      读到文件尾或失败:0

fwrite
size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);
功能:按对象写
参数:同上	
返回值:成功:写的元素个数
      失败 :0

示例:

练习:编程实现cat命令功能。

cat 文件名

思路:打开文件,循环读文件,当读到文件末尾时循环结束,打印读到的数据,关闭文件

练习:编程实现wc -l命令的功能

wc -l 文件名:显示文件的行数

思路:打开文件,循环读文件,当读到文件末尾时循环结束,在循环中判断是否是一行,如果是则对整型变量进行自加,关闭文件。

​​​​​​​4.4文件定位操作

rewind
void rewind(FILE *stream);
功能:将文件位置指针定位到起始位置

fseek
int fseek(FILE *stream, long offset, int whence);
功能:文件的定位操作
参数:stream:文件流
     offset:偏移量:正数表示向后文件尾部偏移,负数表示向文件开头偏移
     whence:相对位置:
           SEEK_SET:相对于文件开头
           SEEK_CUR:相对于文件当前位置
           SEEK_END:相对于文件末尾
返回值:成功:0
        失败:-1

示例:

fseek(fp, 10, SEEK_SET);

fputc('a', fp);

(前面显示的是一个占位的作用,并没有实际的数据)

fseek(fp, -5, SEEK_CUR);
fputc('b', fp);

ftell
long ftell(FILE *stream);
功能:获取位置指针当前的文件位置
参数:要检测的文件流
返回值:成功:当前的文件位置,出错:-1

补充:

标签:文件,缓存,IO,stream,day1,FILE,进程,返回值,size
From: https://blog.csdn.net/weixin_63791423/article/details/143101253

相关文章

  • 用于快速创建机器学习模型的 Web 接口或用户界面的python库:gradio
    一、简介gradio是一个Python库,用于快速创建机器学习模型的Web接口或用户界面,主要优点是允许开发者通过少量的代码创建交互式的Web界面,用户能够上传输入数据并查看模型的输出结果。二、主要特性易于使用:只需几行代码就可以创建接口,不需要前端开发知识。支持多种输入......
  • Springboot启动失败问题:Application run failed(jdk原因)
    以下代码报错ErrorstartingApplicationContext.Todisplaytheconditionsreportre-runyourapplicationwith'debug'enabled.2024-10-1921:56:55.234ERROR16584---[main]o.s.boot.SpringApplication:Applicationrunfailed......
  • 会话层技术-session
    会话层技术-sessionsession技术拿下!一、先整理学习过程中的几个疑惑cookie和session分别都是怎么创建的?首先cookie是一个类,它需要java后端开发人员手动创建。Cookiecookies1=newCookie(keya,valuea);其次session是HttpSession接口的接口对象,它是由服务器来创建的,注......
  • shell编程小技巧:进程替换
    今天来给大家介绍一个非常好用的shell编程技巧,即进程替换(Processsubstitution)。进程替换可以将一个进程(程序)的输入或输出当做一个文件来使用。它的两种使用形式为:<(cmd)或>(cmd).需要注意的是,<和>与(之间不能有空格!下面通过一个示例来介绍进程替换的具体用法。假如我有一个......
  • ue4.26 niagara collisionNormal问题
    目的是让粒子片自由下落,与表面碰撞后停止并调整为与表面一致的朝向。测试用例搭建如下:1,建一个niageraSystem,直接用Fountain模板。2,确认EmitterProperties中SimTarget是CPUSim(出于兼容性考虑)2,在SolveForcesandVelocity前添加Collsion模块(CPU碰撞)。3,将Collision中的Fricti......
  • Collection集合(实际是一个接口)
    Collection集合介绍Collection【接口】:我们通过帮助文档发现,Collection是一个接口,不能直接new对象根据元素是否可以发生重复,继续分类-List【接口】元素可以发生重复,且有索引的概念ArrayList-Set【接口】元素不可以发生重复,没有索引借助ArrayL......
  • vue3 深度响应式是否正常测试,以select options作为例子测试,select options后赋值是否
    <template><divclass='box'><templatev-for="(ditem,dindex)indata1":key="dindex"><el-selectv-model="ditem.value"clearablefilterable><el-optionv-for="ite......
  • Percolation threshold of a system
    Assignment3(Percolation)Goal:Writeprogramstoestimatethepercolationthresholdofasystem,whichisameasureofhowporousthesystemneedsbesothatitpercolates.PartI:WarmupProblemsTheproblemsinthispartoftheassignmentareintended......
  • Java 常用 IO 类说明以及字节流与字符流的区别说明和案例示范
    1.JavaIO类概述1.1什么是IOIO是Input/Output(输入/输出)的缩写,代表了程序与外部环境(如文件、网络、设备等)之间进行数据交换的操作。在Java中,IO操作广泛用于文件读取、写入、网络通信等场景。Java提供了强大的IO类来简化这些操作,并按照不同的数据类型(如字节、......
  • Ocenaudio:简单高效的音频编辑工具
    随着音频编辑的需求不断增加,市场上出现了许多功能强大但同时复杂的音频编辑软件。然而,许多用户只需要一款既易用又功能全面的工具来快速处理音频,而不用应对专业级别软件的复杂性。Ocenaudio正是为这些用户设计的,它提供了简洁的界面和强大的功能,让你能高效完成音频编辑任务......