IO进程----标准IO

目录

IO进程

标准IO

1.  概念:

2.  特点:

3.  缓存区

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

刷新缓存的条件:

1)  程序正常退出

2)  \n刷新

3)  缓存区满刷新

4)  强制刷新 fflush

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

3.3. 不缓存:标准错误 strerr

4.  函数

4.1.  打开文件

4.2.  关闭文件

4.3.  读写文件

每次一个字符的读写

fgetc

fputc

每次一串字符的读写

fgets

fputs

二进制读写文件

fread

fwrite

4.4.  文件定位操作

rewind

fseek

ftell


IO进程

IO:

标准IO

文件IO

文件属性获取

目录操作

库:静态库、动态库

进程:

进程

线程

进程间的通信

标准IO

文件类型:

b c d - l s p

1.  概念:

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

2.  特点:

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

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

2.  围绕进行操作,流用FILE*来描述,FILE代表的是结构体,描述所操作文件的信息

3.  默认打开了三个流:stdin(标准输入)、stdout(标准输出)、stderr(标准错误)

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

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. 不缓存:标准错误 strerr

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

示例:

如果将fopen第二个参数改成"w" 它不能进行读取了

int main()
{
    FILE*fp = fopen(file, "r");
    if(fp == NULL)
        error;
    while(ch = fgets(fp) != EOF)
        printf(ch);
    fclose(fp);
    return 0;
}

补充:

int ferror(FILE* stream)
功能:判断读文件时是否出错
返回值:非0表示

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

示例:

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

示例:

每次一串字符的读写
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

二进制读写文件

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

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

示例:

4.4.  文件定位操作
rewind
#include <stdio.h>
void rewind(FILE *stream);
功能:将文件位置指针定位到起始位置
fseek
#include <stdio.h>
int fseek(FILE *stream, long offset, int whence);
功能:文件的定位操作
参数:stream:文件流
     offset:偏移量:正数表示向后文件尾部偏移,负数表示向文件开头偏移
     whence:相对位置:
           SEEK_SET:相对于文件开头
           SEEK_CUR:相对于文件当前位置
           SEEK_END:相对于文件末尾
返回值:成功:0
        失败:-1

示例;

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

补充:

1.  rewind(fp)和fseek(fp, 0, SEEK_SET)等价

2.  可以通过此函数计算文件中字符个数

3.  当打开文件的方式为a或a+时,fseek不起作用

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

你好,奋斗者!

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

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

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

打赏作者

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

抵扣说明:

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

余额充值