基础IO-文件IO操作

article/2025/10/5 16:25:19

目录

1.C语言文件IO相关操作(库函数IO接口)

2. 系统调用IO接口


1.C语言文件IO相关操作(库函数IO接口)

 fopen--打开文件,返回一个文件的操作句柄,有了句柄才能对指定的文件进行操作。

        FILE *fopen(char *pathname, char *mode);

 参数说明:

        pathname:文件的路径

        mode:文件的打开方式

                r     只读打开(文件不存在会报错)

                w    只写打开(文件不存在则创建,存在则截断长度为0,丢弃原有内容)

                a     追加写打开(文件不存在则创建,存在则写入数据总是写入到文件末尾)

                r+    读写打开(文件不存在会报错)

                w+   读写打开(文件不存在则创建,存在则截断长度为0,丢弃原有内容)

                a+   读写打开(文件不存在则创建,存在则写入数据总是写入到文件末尾)

                b      以二进制形式打开(默认不使用b,则使用的是文本方式打开,对一些特殊字符的处理有区别,例如:\n->\r\n)以文本形式打开文件,有可能会造成读到的数据与文件实际的数据有差别。

fwrite--向文件写入数据

        size_t fwrite(char *data,int bsize, int nmem,FILE  *fp);

参数说明:

        data:指向保存读写数据的内存的指针,可以指向数组,变量,结构体等

        bsize:表示每个数据块的字节数

        nmem:表示要读写的数据块的个数

        fp:表示文件指针

fread--从文件中读取数据

        size_t fread(char *buf,int bsize,int nmem,FILE *fp);

fclose--关闭文件

        int fclose(FILE *fp);

fseek--跳转当前的读写位置

        int fseek(FILE *fp, int offset, int whence)

参数说明:

        whence:文件读写位置的起始偏移位置

                SEEK_SET   文件的起始位置

                SEEK_CUR   当前的读写位置

                SEEK_END    文件的末尾位置

实例: 

#include <stdio.h>
#include <string.h>int main(){FILE *fp=fopen("./bite.txt","w+");//以读写的方式打开一个文件if(fp==NULL){perror("fopen errror");return -1;}char *data="linux so easy!";size_t ret=fwrite(data,1,strlen(data),fp);//向文件中写入数据if(ret!=strlen(data)){perror("fwrite error");fclose(fp);return -1;}fseek(fp,0,SEEK_SET);//由于前边w+打开文件写入数据读写位置变到文尾,因此将当前的读写位置跳 //   转到文首char buf[1024]={0};ret=fread(buf,1,1023,fp);//从文件中读取数据if(ret==0)                                                                           {if(feof(fp)){printf("end of file");}if(ferror(fp)){perror("fread error");fclose(fp);return -1;}}printf("%s\n",buf);//在标准输出中打印读到的数据fclose(fp);//关闭文件return 0;}

 结果:

 

2. 系统调用IO接口

 接口:open        write       read         Iseek       close

 int open(char *pathname, int flag, int mode);--打开文件

参数说明:

        pathname:要打开的文件路径名

        flag:文件的打开方式,打开方式决定了能够对文件进行什么样的操作

                必选项:O_RDONLY(只读)       O_WRONLY(只写)       O_RDWR(读写),只能选择其一,不能同时使用

                可选项:O_CREAT  -文件不存在则创建    O_TRUNC -截断文件,丢弃原有数据

                                O_APPEND -追加写

                例"w+" -- O_RDWR|O_CREAT|O_TRUNC

        mode:当O_CREAT被使用时,就一定要设置第三个参数mode--用于设定被创建文件的访问权限0664

        0664 --需要特别注意,前边的0不能省略,会涉及到特殊权限位的设置

        给定的权限不一定是实际得到的权限,实际的文件权限会受到umask的影响

        实际得到的权限:给定的权限&(~umask)

        返回值:成功返回文件描述符fd,失败返回-1

ssize_t write(int fd, char *buf,size_t len);--向文件中写入数据

参数说明:

        fd:open打开文件时返回的操作句柄--文件描述符

        buf:要写入文件的数据的所在空间首地址

        len:要写入的数据长度(以字节为单位)

        返回值:成功返回实际读取到的数据长度;失败返回-1

 ssize_t read(int fd, char *buf,size_t len);--从文件中读取数据

 参数说明:

        fd:open打开文件时返回的文件描述符

        buf:一开空间的首地址,用于存放读取到的数据

        len:要读取的数据长度(这个长度不能大于buf空间的大小,避免越界)

        返回值:成功返回实际读取到的数据长度;0表示读到了文件末尾;失败返回-1 

 off_t Iseek(int fd, off_t offset, int whence);--跳转当前读写位置   

 参数说明: 

        fd:文件描述符

        offset:偏移量

        whence:偏移起始位置   SEEK_SET; SEEK_CUR; SEEK_END;

        返回值:当跳转后,读写位置相对于文件起始位置的偏移量

 int close(int fd);--关闭文件

 参数说明:

        fd:文件描述符

实例:

#include <stdio.h>#include <fcntl.h>#include <string.h>#include <unistd.h>int main(){int fd=open("./bite.txt",O_CREAT|O_RDWR|O_TRUNC,0664);if(fd<0){perror("open error");return -1;}char *data="i like linux!";ssize_t ret=write(fd,data,strlen(data));if(ret<0){perror("write error");close(fd);return -1;}lseek(fd,0,SEEK_SET);char buf[1024]={0};ret=read(fd,buf,1023);if(ret<0){perror("read error");close(fd);return -1;}printf("%s\n",buf);                                                                close(fd);return 0;}

结果:

 

 

        

 

 

 

        

      

 


http://chatgpt.dhexx.cn/article/RLmSuZI6.shtml

相关文章

Java文件IO操作

目录 一、了解什么是文件 狭义的文件&#xff1a; 广义的文件&#xff1a; 二、文件的路径 ①文件的绝对路径 ②文件的相对路径 三、Java对于文件的操作 File类的构造方法 File类的普通方法 四、对于文件的内容操作 ①FileInputStream&#xff08;文件输入流&#xf…

IO操作

一、简介 IO流是用来处理设备之间的数据传输的&#xff0c;数据一般储存在设备上 设备&#xff1a;硬盘&#xff0c;光盘&#xff0c;内存等等&#xff0c;内存是临时储存的 Java对数据的操作是采用流的方式 按照操作的数据分为&#xff1a;字节流和字符流 暗照流向&#x…

Java基础--IO操作

一、IO原理及分类 一、IO原理 1、I/O是Input/Output的缩写&#xff0c;I/O技术是非常实用的技术&#xff0c;用于处理设备之间的数据传输&#xff0c;如读写文件&#xff0c;网络通信等。 2、java程序中对于数据的输入/输出操作一般都是以流的方式进行 3、java.io包下提供各…

关于I/O操作

https://blog.csdn.net/deram_boy/article/details/51191425 提及这个&#xff0c;就想到了各种文件操作&#xff0c;这种流&#xff0c;什么reader 啊&#xff0c; writer啊&#xff0c;buffer啊&#xff0c;file啊。但是综合的东西与总结&#xff0c;只是曾经了解。因为工作…

IO操作概念

IO&#xff1a;输入输出&#xff0c;对程序的输入与输出 文件&#xff1a;一组有关数据的集合 文件名&#xff1a;这组数据的名字 linux系统中所有文件均属于文件&#xff08;通过文件系统进行管理&#xff09; 按类型分类&#xff1a; 1、普通文件 &#xff08;…

I/O操作

前言 I/O操作即操作存储器&#xff0c;所以想了解I/O操作&#xff0c;需要了解一点存储器相关知识点。 计算机存储器 存储器是计算机的核心部件之一&#xff0c;在完全理想的状态下&#xff0c;存储器应该要同时具备以下三种特性&#xff1a; &#xff08;1&#xff09;速度…

操作系统_04_IO相关(个人总结)

声明: 1. 本文为我的个人复习总结, 并非那种从零基础开始普及知识 内容详细全面, 言辞官方的文章 2. 由于是个人总结, 所以用最精简的话语来写文章 3. 若有错误不当之处, 请指出 软硬链接 软链接(快捷方式): 删除原文件时, 软链接则失效 硬链接…

gcc 命令

gcc 命令 GCC 编译器 gcc 命令格式 gcc 选项 文件名字主要选项 -c&#xff1a; 只编译不链接为可执行文件&#xff0c;编译器将输入的.c 文件编译为.o 的目标文件。-o&#xff1a; <输出文件名>用来指定编译结束以后的输出文件名&#xff0c;如果不使用这个选项的话 G…

Ubuntu Linux gcc的常用命令

目录 一、gcc简介 二、简单的gcc编译 1 预处理 2 编译为汇编语言代码 3 汇编 4 连接 三、多个程序文件的编译 四、检查错误 五、连接库文件 1 编译成可执行文件 2 链接 3 强制链接时使用静态链接库 六、总结 一、gcc简介 Linux系统下的Gcc&#xff08;GNU C Compi…

Linux GCC 编译详解

文章目录 一、GCC 编译器简介二、GCC 工作流编程语言的发展GCC 工作流程gcc 和 g 的区别 三、使用 GCC 编译GCC 编译格式GCC 编译流程多个源文件编译 一、GCC 编译器简介 首先&#xff0c;什么是编译器呢&#xff1f; 我们可以使用编辑器&#xff08;如 linux 下的 vi、window…

gcc编译命令的常用选项——强烈推荐大家使用 -Wall 选项

C程序编编译的过程分为如下四个阶段 1.预处理&#xff1a;头文件展开&#xff08;#include&#xff09;、宏替换&#xff08;#define&#xff09;、条件编译&#xff08;#ifdef&#xff09;(.i)使用预处理器&#xff08;预处理阶段处理的都是以#开头的代码&#xff09; 2.编译…

Linux(gcc编译原理、过程以及常用调试命令)

PS&#xff1a;红色字体表示重点&#xff0c;绿色字体表示重要标题&#xff0c;块引用中表示Linux终端中的命令。 1.gcc / g的安装 命令&#xff1a;sudo apt install gcc /gcc 2.gcc编译连接 //main.c文件 &#xff08;1&#xff09;预编译 ①删除所有的“#define”&#…

Linux中gcc编译步骤

我们这里以C语言为例&#xff0c;看看C语言程序在Linux中编译执行的详细步骤 1.创建一个.c文件 2.写入一些简单的代码 我们使用gcc -E filename.c -o filename.i 命令对程序先进行预处理&#xff1a;处理头文件、宏定义&#xff0c;接下来我们修改一下头文件&#xff0c;使用错…

Linux GCC常用命令

目录 一、示例一 1.简单编译 1.1预处理 1.2编译为汇编代码 1.3汇编 1.4连接 2.多个程序文件的编译 3检错 4库文件连接 二、示例二 1.准备hello.c 2.预处理 3.编译 4.汇编 5.链接 6.分析ELF文件 6.1ELF文件的段 6.2反汇编ELF 一、示例一 1.简单编译 创建文件mkd…

GCC编译过程及基本命令总结

一、GCC简介 GCC即GNU Compiler Collection&#xff0c;原本只是针对C语言的编译工具&#xff0c;现在已经变成了一个工具集&#xff0c;包含了C、C、JAVA等语言的集合体。 管理和维护&#xff1a;由GNU项目负责。 二、GCC对C、C的编译流程 (1) 预处理&#xff08;Preproce…

Linux 下的 gcc 编译常用命令

gcc&#xff1a;Linux下的一款编译器。 gcc工作流程&#xff1a; 完整编译流程&#xff1a; 创建一个c语言源文件&#xff1a; gcc -E hello.c -o hello.i&#xff08;头文件展开&#xff0c;进行源文件中的宏替换&#xff0c;注释过滤&#xff09; gcc -S hello.i -o hello.…

GCC命令编译

1.GCC编译过程&#xff08;原理如下&#xff0c;使用命令请见2&#xff09; 从 hello.c 到 hello(或 a.out)文件&#xff0c; 必须历经 hello.i、 hello.s、 hello.o&#xff0c;最后才得到 hello(或a.out)文件&#xff0c;分别对应着预处理、编译、汇编和链接 4 个步骤&#…

gcc 命令详解及最佳实践

介绍 GCC&#xff08;英文全拼&#xff1a;GNU Compiler Collection&#xff09;是 GNU 工具链的主要组成部分&#xff0c;是一套以 GPL 和 LGPL 许可证发布的程序语言编译器自由软件&#xff0c;由 Richard Stallman 于 1985 年开始开发。 GCC 原名为 GNU C语言编译器&#…

使用GCC编译程序常用命令

一、编译器驱动程序 首先梳理一下源文件到可执行文件的整个过程&#xff0c;下面是两个源文件的组成main.c和sum.c // main.c int sum(int *a, int n); int array[2] { 1, 2 }; int main() {int val sum(array, 2);return val; }// sum.c int sum(int *a, int n) {int i, s…

matlab 反向二值化,MATLAB:图像二值化、互补图(反运算)(im2bw,imcomplement函数)...

图像二值化、反运算过程涉及到im2bw&#xff0c;imcomplement函数&#xff0c;反运算可以这么理解&#xff1a;原本黑的区域变为白的区域&#xff0c;白的区域变为黑的区域。 实现过程如下&#xff1a; close all;%关闭当前所有图形窗口&#xff0c;清空工作空间变量&#xff0…