目录

一、多文件编程

二、⽬录(⽂件)操作

1.创建⽬录mkdir

2.删除⽬录rmdir

3.打开⽬录⽂件

4.获取打开⽬录中的⽂件readdir

5.关闭打开的⽬录⽂件closedir

6.字符串操作

三、文件IO

1.打开文件 open

2.读取⽂件(输⼊到程序)read

3.写⼊⽂件(输出到⽂件)write

4.关闭⽂件close

5.设置⽂件偏移位置lseek

四、标准IO

1.打开⽂件fopen

2.关闭⽂件fclsoe

3.写⼊⽂件fwrite

4.读取⽂件fread

5.刷新标准io缓冲区(把缓冲区内容写⼊⽂件)

6.判断是否错误或读取到⽂件结束

7.读取单个字符fgetc

8.写⼊单个字符fputc

9.读取⼀个字符串fgets

10.写⼊⼀个字符串


一、多文件编程

        多⽂件编程:把⼀个程序的源代码,根据程序员的想法进⾏归类,把相关的功能函数添加在⼀个⽂件中,⼀个项⽬⼯程程序可能就有多个⽂件构成,这就叫做多⽂件编程
        在C中有⼀种⽂件,专门⽤于书写声明,叫做头⽂件 xxx.h,作⽤就是可以⽤于多⽂件编程中声明编写只写⼀份,让后在多个⽂件中进⾏include,在编译时预处理阶段就展开声明
        #include “xxx.h” 就表⽰要使⽤这个xxx.h中的声明

二、⽬录(⽂件)操作

1.创建⽬录mkdir

#include <sys/stat.h>
#include <sys/types.h>
在指定⽬录中创建⼀个⽬录⽂件
        int mkdir(const char *pathname, mode_t mode);
参数:
        参数1:
                const char *pathname:指针,字符串⾸地址,要创建的⽬录⽂件的路径
        参数2:
                mode_t mode:创建的⽬录的权限(读写执⾏)
        返回值:
                成功:返回0
                失败:返回-1

2.删除⽬录rmdir

#include <unistd.h>
        int rmdir(const char *pathname);
参数:
        参数1:
                const char *pathname:字符串⾸地址,表⽰要删除的⽬录
        返回值:
                成功:返回0
                失败:返回-1

3.打开⽬录⽂件

#include <sys/types.h>
#include <dirent.h>
去打开对应路径下的⽬录
        DIR *opendir(const char *name);
参数:
        参数1:
                const char *name:字符串⾸地址,表⽰要打开的⽬录⽂件路径
        返回值:
                DIR:⽬录信息结构体类型
                成功:返回⽬录信息结构体的地址(指针),标识打开的⽬录⽂件
                失败:返回NULL(空指针)

4.获取打开⽬录中的⽂件readdir

#include <dirent.h>
获取打开的⽬录中,⼀个⽂件
        struct dirent * readdir(DIR *dirp);
参数:
        参数1:
                DIR *dirp:获取哪个(打开的)⽬录中的⽂件
        返回值:
                成功:返回获取到的这个⽂件的描述(结构体)的地址
                NULL:表⽰本次获取已经获取到⽬录的结尾了没有⽂件了(已经获取完)
⽂件描述结构体
        struct dirent {
                ino_t d_ino;//inode号,⽂件系统中对⽂件的唯⼀编号
                off_t d_off;//偏移
                unsigned short d_reclen;//⻓度⼤⼩
                unsigned char d_type;//⽂件类型
                char d_name[256];//⽂件名
};

5.关闭打开的⽬录⽂件closedir

#include <sys/types.h>
#include <dirent.h>
关闭打开的⽬录
        int closedir(DIR *dirp);
参数:
        参数1:
                DIR *dirp:表⽰要关闭的⽬录⽂件
        返回值:
                成功:返回0
                失败:返回-1

6.字符串操作

#include <string.h>
⽐较两个字符串
        int strcmp(const char *s1, const char *s2);
        //⽐较s1字符串,和s2字符串是否相等,从第⼀个字符开始⽐较,⼀直⽐较到字符串结束,如果每个字符都相等,则整个字符串相等,返回0
⽐较两个字符串前n个字符是否相等,相等返回0
        int strncmp(const char *s1, const char *s2, size_t n);
把src字符串内容追加到dest字符串最后字符位置,让dest字符串添加内容
        char *strcat(char *dest, const char *src);
把src字符串内容前n个字符追加到dest字符串最后字符位置,让dest字符串添加内容
        char *strncat(char *dest, const char *src, size_t n);
把src字符串内容拷⻉到dest中,覆盖原dest内容,让dest变为src字符串内容
        char *strcpy(char *dest, const char *src);
把src字符串前n个字符拷⻉到dest中,覆盖原dest内容,让dest变为src字符串内容
        char *strncpy(char *dest, const char *src, size_t n)
获取s地址字符串的⻓度(不计算'\0'),返回值就是⻓度
        size_t strlen(const char *s);

三、文件IO

IO:输⼊输出
在程序中如果要操作磁盘上的⽂件,对⽂件就是读写操作
读:程序从磁盘上的⽂件中获取到内容放⼊到程序中----输⼊
写:程序把程序中的数据存放到磁盘上的⽂件中---------输出
        Linux系统提供⼀套系统调⽤API,⽂件IO:open、read、write、close、 lseek等

1.打开文件 open

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
打开⽂件:
        int open(const char *pathname, int flags);
参数:
        参数1:
                const char *pathname:字符指针,表⽰的是字符的地址,字符串的⾸地址,要打开的⽂件路径字符串的地址
        参数2:
                int flags:整数,打开⽂件的选项
                 O_RDONLY:只读
                O_WRONLY:只写
                O_RDWR:读写
                O_TRUNC:清空⽂件(在有 写 ⽅式 有效)
                O_APPEND:追加⽂件(在有 写 ⽅式 有效),在写⽂件时,在⽂件末尾位置添加写
                O_CREAT: 如果⽂件不存在则,创建⽂件,存在则直接打开,如果要使⽤当前选择,则需要第三个参数:创建⽂件权限
返回值:
                失败,返回-1
                成功打开⽂件,返回⽂件描述符 >= 0
创建且打开⽂件:
        int open(const char *pathname, int flags, mode_t mode);

2.读取⽂件(输⼊到程序)read

#include <unistd.h>
从打开的⽂件中读取⽂件内容,输⼊到程序中
        ssize_t read(int fd, void *buf, size_t count);//从指定的fd(打开的⽂件中,读取count个字节数据,存放到程序的内存buf地址开始位置)
参数:
        参数1:
                int fd:⽂件描述符,表⽰打开的⽂件
        参数2:
                void *buf:指针,表⽰把从⽂件中读取的内容,存放到程序指定的内存地址中
        参数3:
                size_t count:整数,表⽰从⽂件中读取多少个字节的数据内容
        返回值:
                成功:返回读取到的字节数,如果返回值为0表⽰本次读取是从⽂件末尾开始读取,没有内容
                失败:-1

3.写⼊⽂件(输出到⽂件)write

#include <unistd.h>、
从程序中把内存数据写⼊到⽂件中,程序输出到⽂件中
        ssize_t write(int fd, const void *buf, size_t count);//把buf这个内存地址的中的数据,拿出 count字节数,写⼊到fd⽂件中
参数:
        参数1:
                int fd:要写⼊哪个⽂件
        参数2:
                const void *buf:要写⼊的内容在哪个内存地址(把哪个内存地址的内容,写⼊⽂件)
        参数3:
                size_t count:要写⼊内容的⼤⼩
        返回值:
                成功:返回写⼊的字节数
                失败:返回-1

4.关闭⽂件close

#include <unistd.h>
把打开的⽂件关闭
        int close(int fd);
参数:
        参数1:
                int fd:⽂件描述符,表⽰关闭哪个打开的⽂件
        返回值:
                成功:返回0
                失败:返回-1

5.设置⽂件偏移位置lseek

#include <sys/types.h>
#include <unistd.h>
重新设置⽂件当前操作位置(修改偏移位置)
        off_t lseek(int fd, off_t offset, int whence);//设置打开的fd⽂件的偏移位置
参数:
        参数1:
            int fd:表⽰打开的⽂件,要设置的⽂件
        参数2:
                off_t offset:整数,偏移量,表⽰偏移多少个字节
                +:正数,向⽂件末尾偏移
                -:负数,向⽂件开头偏移
        参数3:

                  int whence:基准点,表⽰从哪个位置开始计算
                SEEK_SET:从⽂件开始位置计算偏移
                SEEK_CUR:从⽂件当前的操作位置计算偏移
                SEEK_END:从⽂件末尾位置开始计算偏移
        返回值:
                成功:返回从⽂件开始位置到新偏移之后位置⼀共多少个字节
                失败:返回-1

四、标准IO

        标准IO:由C语⾔标准委员会设计的⼀套⽂件的操作API函数

1.打开⽂件fopen

#include <stdio.h>
打开指定的⽂件
        FILE *fopen(const char *pathname, const char *mode);
参数:
        参数1:
                const char *pathname:字符串⾸地址,表⽰要打开的⽂件路径
        参数2:
                const char *mode:字符串⾸地址,通过通过字符串来表⽰
                打开⽂件的⽅式
                "r":只读⽅式打开(⽂件必须存在)---------O_RDONLY
                "r+":读写⽅式打开--------O_RDWR
                "w":只写⽅式打开(清空⽂件,当⽂件不存在时创建)----O_WRONLY | O_CREAT | O_TRUNC
                "w+":读写⽅式打开(清空⽂件,当⽂件不存在时创建)---O_RDWR | O_CREAT | O_TRUNC
                "a":追加写⽅式打开(操作位置在⽂件末尾,当⽂件不存在时创建)---O_WRONLY | O_CREAT | O_APPEND
                "a+":读写⽅式打开(写为追加写操作位置在⽂件末尾,当⽂件不存在时创建)-----O_RDWR | O_CREAT | O_APPEND
                如果上述字符串中 包含'b'表⽰打开⼆进制⽂件,否则打开是⽂本⽂件
        返回值:
                FILE:是⼀个结构体,描述打开的⽂件信息(包括了⽂件描述符)
                返回值就是返回FILE这个结构体类型变量的地址
                成功:返回FILE * 指针,⽂件信息结构体地址(能知道打开的⽂件)
                失败:返回NULL(空指针)

2.关闭⽂件fclsoe

#include <stdio.h>
关闭⽂件,则会把当前打开的⽂件的缓冲区存放到⽂件中
int fclose(FILE *stream);
参数:
        参数1:
                FILE *stream:关闭打开的哪个⽂件
        返回值:
                成功:返回0
                失败:返回-1(EOF)

3.写⼊⽂件fwrite

#include <stdio.h>
把数据写⼊到⽂件
        size_t fwrite(const void *ptr, size_t size, size_t nmemb,FILE *stream);
参数:
        参数1:
                const void *ptr:要写⼊⽂件的内容对应地址
        参数2:
                size_t size:每⼀个数据⼤⼩
        参数3:
                size_t nmemb:写⼊多少个数据
        参数4:
                FILE *stream:写⼊的⽂件
        返回值:
                成功:返回写⼊的数据的个数

4.读取⽂件fread

#include <stdio.h>
从⽂件中读取数据存放到ptr
size_t fread(void *ptr, size_t size, size_t nmemb, FILE*stream);
参数:
        参数1:
                void *ptr:从⽂件中读取的数据存放的位置(指针)

        参数2:
                size_t size:每个数据⼤⼩(字节)
        参数3:
                size_t nmemb:读取多少个数据
        参数4:
                FILE *stream:读取的⽂件
        返回值:
                成功:返回读取的数据个数
                0:表⽰读取时没有数据可读(到达⽂件末尾) , 或 读取错误

5.刷新标准io缓冲区(把缓冲区内容写⼊⽂件)

#include <stdio.h>
主动把缓冲区的内容写⼊⽂件
        int fflush(FILE *stream);

6.判断是否错误或读取到⽂件结束

#include <stdio.h>
测试当前是否是⽂件末尾,如果是⽂件末尾返回⾮0(返回真)
        int feof(FILE *stream);
         
测试当前是否是错误,如果是错误返回⾮0
        int ferror(FILE *stream);

7.读取单个字符fgetc

#include <stdio.h>
从⽂件中读取⼀个字符,以返回值形式,返回读取到的字符(int)
        int fgetc(FILE *stream);
参数:
        参数1:
                FILE *stream:从哪个⽂件中读取
        返回值:
                成功:返回读取到的字符,以int类型(字符对应的ASCII码)表⽰
                如果本次是在⽂件末尾位置读取(⽂件结束位置),返回EOF(-1)
                如果读取失败,返回EOF
                需要判断 EOF到底是失败还是读取到⽂件末尾
                int getc(FILE *stream); ==== fgetc
                int getchar(void); == fgetc(stdin):从终端⽂件读取(输⼊)⼀个字符

8.写⼊单个字符fputc

#include <stdio.h>
往⽂件中写⼊⼀个字符
int fputc(int c, FILE *stream);
参数:
        参数1:
                int c:要写⼊的字符的ASCII码
        参数2:
                FILE *stream:要写⼊的⽂件
        返回值:
                成功:返回写⼊的字符的ASCII码
                失败:返回EOF(-1)
                int putc(int c, FILE *stream); 等价于 fputc
                int putchar(int c);等价于 ===== fputc(c,stdout),往终端⽂件写⼊⼀个字符

9.读取⼀个字符串fgets

#include <stdio.h>
从⽂件中读取⼀个字符串
        char *fgets(char *s, int size, FILE *stream);从⽂件 stream中读取内容,最多读取size-1个字符,存储到s指针这个地址中。
        具体读取的字符⼤⼩:⼆选⼀
                1、读取到⽂件结束
                2、读取到⼀⾏结束(\n)
                如果在读取过程中当读取到size-1时,两个都不满⾜,则读取size-1个字符(读取最⼤⼤⼩)

                注意:在读取的字符串后,加上'\0'字符,表⽰字符串的结束
        返回值:
                成功:返回 s 指针
                NULL:本次读取在⽂件结束位置读取(已经读取到⽂件末尾)
                char *gets(char *s);等价于 == fgets(s,,stdin),从终端上读取⼀个字符串,没有限制⼤⼩(没有size-1)容易越界

10.写⼊⼀个字符串

#include <stdio.h>
把s中的字符串('\0'为⽌),写⼊到⽂件中
        int fputs(const char *s, FILE *stream);
参数:
        参数1:
                const char *s:要写⼊的字符串,到'\0'为⽌
        参数2:
                FILE *stream:写⼊的⽂件
        返回值:
                成功:⾮负整数 >= 0
                失败:EOF(-1)
        int puts(const char *s);等价于 ==== fputs(s,stdout),往终端上写字符串

文件IO编程之学习总结相关推荐

  1. linux 带缓存的fwrite,文件IO编程之(六):基于流缓冲 fopen,fwrite,fput

    标准IO开发 前面分析的文件IO编程都是基于文件描述符的.这些都是基本的IO控制,是不带缓存的. 这里要讨论的IO操作是基于流缓冲的,它是符合ANSIC的标准IO处理. 标准IO提供流缓冲的目的是尽可 ...

  2. 2.Linux文件IO编程

    2.1Linux文件IO概述 2.1.0POSIX规范 POSIX:(Portable Operating System Interface)可移植操作系统接口规范. 由IEEE制定,是为了提高UNI ...

  3. 嵌入式Linux基础学习笔记-文件IO编程-I/O多路复用

    实验内容:多路复用-I/O操作及阻塞 编程实现文件描述符集合的监听 multiplex_poll.c文件编写: /* multiplex_poll.c */ #include <fcntl.h& ...

  4. 嵌入式Linux基础学习笔记-文件IO编程-文件锁(2)

    文件操作仿真FIFO,实现生产者-消费者运行模型 编程实现生产者程序producer.c,创建仿真FIFO结构文件(普通文件),按照给定的时间间隔向FIFO文件写入自动生成的字符(自定义),生产周期及 ...

  5. 嵌入式Linux基础学习笔记-文件IO编程-文件锁(1)

    文件锁-文件共享 共享资源竞争问题的解决方法:文件锁. 文件锁包括 建议性锁 要求每个上锁文件的进程都要检查是否有锁存在,并且尊重 已有的锁 强制性锁 由内核执行的锁,当一个文件被上锁进行写入操作的时 ...

  6. java记事本编程工作原理_Java文件(io)编程之记事本开发详解

    本文实例为大家分享了Java开发简易记事本的具体代码,供大家参考,具体内容如下 public class NotePad extends JFrame implements ActionListene ...

  7. _int64_在Linux对应对文件,LInux 编程基础学习笔记 持续ing 文件读写

    一.文件读写 1.创建文件: 头文件: 函数:creat(char *path,int mode)  mode:S_I(R|W|X)(USR|GRP|OTH)   对不同用户组的不同读写执行 2.打开 ...

  8. c语言 文件 lseek,文件IO编程之(二):read.write.lseek

    下面认真分析write.c函数 #include//包含必要的头文件 #include#include#include#include#include#include#define MAXSIZE i ...

  9. Python学习笔记:Io编程序列化

    前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...

最新文章

  1. 北大新研究用数学模型揭网红崛起奥秘!登上Nature子刊
  2. 报告 | 2019年全球数字化转型现状研究报告
  3. 中兴再夺PCT国际专利申请榜首:连续7年位居前三
  4. 如何获取python的当前工作目录-python笔记(一)获取当前目录路径和文件
  5. 一篇文章弄懂Java反射基础和反射的应用场景
  6. 深度学习(七十一)3D CNN时空特征学习
  7. 前端:JS/17/前篇总结(JS程序的基本语法,变量),数据类型-变量的类型(数值型,字符型,布尔型,未定义型,空型),数据类型转换,typeof()判断数据类型,从字符串提取整数或浮点数的函数
  8. (208)ASIC开发总结
  9. ESP8266-01/01S配对阿里云生活物联网教程(超详细)
  10. python短期预测图_用Python预测「周期性时间序列」的正确姿势
  11. 常见错误——给定编码中的字符无效。(xml)
  12. java后台开发程序媛~~
  13. linux的进程rl,linux 进程 rl是什么状态
  14. 常见外贸英文术语(下)
  15. 我分析了100篇文章,总结出5点头条号推荐机制真相
  16. 让iPad认识一下Windows系统
  17. C语言编写九九乘法表,实现不同三角形形状表格输出
  18. WeChatExtension:一款mac微信必备插件!
  19. Scrum立会报告+燃尽图(Beta阶段第二周第一次)
  20. 联合分析法(Python实现)

热门文章

  1. 高性能MySQL学习笔记(1) —— MySQL架构
  2. PLSQL 11注册码
  3. 恢复报错ora-01180
  4. MAC实用SSH连接远程服务器,并实现文件上传下载
  5. 算法图解第六章笔记与习题(广度优先搜索)
  6. Java垃圾回收机制总结
  7. JS -- 作用域、作用域链以及延长作用域链的方法
  8. 3D点云处理:半径滤波器中值滤波器
  9. 看完你就知道什么是瞎忙与高效
  10. 搜索引擎的设计与实现(一)从零开始?