C语言中的IO控制流

news2024/12/24 8:13:20

文章目录

  • 一、什么是C语言中的IO控制流
  • 二、open函数
    • 1.使用open函数创建文件
    • 2.使用使用open函数打开文件
  • 三、文件的权限
  • 四、文件的描述符
  • 五、read函数
  • 六、write函数
  • 七、lseek函数
  • 八、close函数

一、什么是C语言中的IO控制流

在linux系统中一切皆文件,C语言中的IO控制流就是用于操作文件的一组函数。

二、open函数

      open函数常用于打开或创建文件

      函数原型:两个参数:int open(const char *pathname, int flags)

      三个参数:int open(const char *pathname, int flags, mode_t mode)

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

      参数1:const char *pathname表示文件袋全名,就是路径+文件名

      参数2:int flags表示打开文件的方式,

      O_RDONLY只读方式打开文件,O_WRONLY只写方式打开文件,O_RDWR读写方式打文件

      O_CREAT文件不存在就创建文件,O_TRUNC文件文件存在清空文件内容

      参数3:mode_t mode表示文件的权限,在前面需要加一个0

  

1.使用open函数创建文件

一般使用三个参数时open用于打开文件

//1.使用open函数创建文件

    int fd = open("./a.txt",O_CREAT,0777);

    if(fd == -1){

        perror("创建失败");

        return -1;

    }

    printf("文件描述符:%d\n", fd);

    close(fd);

2.使用使用open函数打开文件

一般使用两个参数open时用于打开文件

//1.打开文件

    int fd = open("./a.txt",O_RDWR);

    if(fd == -1){

        perror("打开文件失败");

        return -1;

    }

    printf("文件描述符:%d\n", fd);

    close(fd);

三、文件的权限

我们打开linux虚拟机的终端,我们输入命令ls -l列出文件的详细的信息

我们看最左边的第一个字符表示该文件的类型,从第二个字符到第十个字符就是表示该文件的权限

我们以第一个文件bin举例:

权限为三个八进制数,r(可读权限)对应的十进制数为4,w(可写权限)对应的十进制数为2,x(可运行权限)对应的十进制数为1

四、文件的描述符

1.什么是文件描述符

我们可以把文件的描述符当成文件一个标志,它是int类型的整数。当我们使用open函数操作文件时就会返回给我们一个文件描述符,该文件描述符可以代表整个文件

int fd = open("./a.txt",O_RDWR);//fd为a.txt文件的描述符

close(fd);//就是将文件a.txt文件的资源释放,此时fd文件描述符就是代表文件a.txt

2.文件描述符的分配

#include<stdio.h>

#include<sys/types.h>

#include<sys/stat.h>

#include<fcntl.h>

#include<unistd.h>

int main(){

    //1.使用open函数创建文件

    int fd = open("./a.txt",O_CREAT,0777);

    if(fd == -1){

        perror("打开失败");

        return -1;

    }

    printf("文件描述符:%d\n", fd);

    close(fd);

}

运行结果:

五、read函数

      read函数

      函数原型:size_t read(int fd, const void *buf, size_t count);

      参数1:int fd:文件的描述符

      参数2:const void *buf:字符缓冲去数组

      参数3:size_t count:读取字符的个数

      返回值:成功返回读取字符的个数,失败返回-1

      功能:将指定文件的内容读入字符缓冲去数组中

#include<stdio.h>

#include<sys/types.h>

#include<sys/stat.h>

#include<fcntl.h>

#include<unistd.h>

int main(){

    //1.打开文件

    int fd = open("./a.txt",O_RDWR);

    if(fd == -1){

        perror("打开文件失败");

        return -1;

    }

    printf("文件描述符:%d\n",fd);

    //2.读取文件的内容

    //2.1创建一个字符缓冲区数组

    char buf[1024];

    //2.2调用read函数读取文件内容

    read(fd,buf,sizeof(buf));

    printf("读取的内容:%s\n",buf);

    close(fd);

}

六、write函数

      write函数

      函数原型:size_t write(int fd, const void *buf,size_t count);

      参数1:int fd,文件描述符

      参数2:const void *buf,要写入的数据

      参数3:size_t count,要写入的数据的字节数

      返回值:成功返回写入的字节数,失败返回-1

      功能:将字符缓冲数组中的内容写入文件中

#include<stdio.h>

#include<sys/stat.h>

#include<sys/types.h>

#include<string.h>

#include<fcntl.h>

#include<unistd.h>

int main(){

    //1.打开文件

    int fd = open("./a.txt",O_RDWR);

    //2.创建字符缓冲去数组

    char buf[] = "hello world";

    //3.调用write函数将字符缓冲区中的内容写入文件中

    write(fd,buf,strlen(buf));

    //4.关闭文件

    close(fd);

}

七、lseek函数

#include<stdio.h>

#include<sys/types.h>

#include<sys/stat.h>

#include<fcntl.h>

#include<unistd.h>

#include<string.h>

int main(){

     * lseek函数

     * 函数原型:off lseek(int fd, off offset, int whence);

     * 参数1:int fd:文件描述符

     * 参数2:off offset:偏移量

     * 参数3:int whence:偏移起始位置

     * 位置1:SEEK_SET文件的开头

     * 位置2:SEEK_CUR当前位置

     * 位置3:SEEK_END文件的结尾

     * 返回值:成功返回偏移量,失败返回-1

#include<stdio.h>

#include<sys/types.h>

#include<sys/stat.h>

#include<fcntl.h>

#include<unistd.h>

#include<string.h>

int main(){

    //1.打开文件

    int fd =  open("./a.txt",O_RDWR);

    //2.设置偏移量

    lseek(fd,11,SEEK_SET);

    //3.读文件

    // //3.1创建一个字符缓冲数组

    // char buf[1024];

    // read(fd,buf,sizeof(buf));

    // printf("%s\n", buf);

    //写入文件

    char buf[1024] = "hello world";

    write(fd,buf,strlen(buf));

   

    //4.关闭文件

    close(fd);

}

八、close函数

        close函数

        函数原型:int close(int fd);

        参数:int fd 文件的描述符

        返回值:int 类型的整数,操作成功返回1,否则返回-1

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1954003.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【SQL 新手教程 4/20】关系模型 --索引

&#x1f497; 关系数据库建立在关系模型上⭐ 关系模型本质上就是若干个存储数据的二维表 记录 (Record)&#xff1a; 表的每一行称为记录&#xff08;Record&#xff09;&#xff0c;记录是一个逻辑意义上的数据 字段 (Column)&#xff1a;表的每一列称为字段&#xff08;Colu…

Java | Leetcode Java题解之第299题猜数字游戏

题目&#xff1a; 题解&#xff1a; class Solution {public String getHint(String secret, String guess) {int bulls 0;int[] cntS new int[10];int[] cntG new int[10];for (int i 0; i < secret.length(); i) {if (secret.charAt(i) guess.charAt(i)) {bulls;} e…

C语言条件语句中switch语句的一些用法

目录 1. switch语句写一个简单的switch语句 2. if语句和else语句的对比判断3的倍数情况 3. switch语句中break详解4. switch语句的一项小练习5. switch语句中的default6. switch语句中的顺序问题 1. switch语句 C语言除了if...else...作为条件语句外&#xff0c;还提供了switc…

Java(十)——接口

个人简介 &#x1f440;个人主页&#xff1a; 前端杂货铺 ⚡开源项目&#xff1a; rich-vue3 &#xff08;基于 Vue3 TS Pinia Element Plus Spring全家桶 MySQL&#xff09; &#x1f64b;‍♂️学习方向&#xff1a; 主攻前端方向&#xff0c;正逐渐往全干发展 &#x1…

数据库表的行列转换(行转列,列转行)

目录 前言 行转列 创建测试表 score1 插入测试数据 需求与通用SQL写法 列转行 创建测试表 score2 插入测试数据 需求与通用SQL写法 前言 在工作中&#xff0c;多多少少都会遇到一些数据展示的需求&#xff0c;开发一个接口&#xff0c;从数据库中查询数据返回页面展示…

Thinkphp仿华为商城源码/红色风格电脑手机数码商城系统网站源码

Thinkphp仿华为商城&#xff0c;主要实现了商品首页展示、用户意见、商品分类列表、商品搜索、商品详细展示、购物车、订单生成、在线付款、以及个人中心完善个人资料、用户修改收货地址、余额查询、消费查询、订单管理、商品评价、热销商品和最近商品浏览&#xff1b; 后台是…

Langchain核心模块与实战[8]:RAG检索增强生成[loader机制、文本切割方法、长文本信息处理技巧]

Langchain核心模块与实战[8]:RAG(Retrieval Augmented Generation,检索增强生成) RAG(Retrieval-Augmented Generation)技术是一种结合检索和生成功能的自然语言处理(NLP)技术。该技术通过从大型外部数据库中检索与输入问题相关的信息,来辅助生成模型回答问题。其核心…

面试重点---快速排序

快排单趟 快速排序是我们面试中的重点&#xff0c;这个知识点也很抽象&#xff0c;需要我们很好的掌握&#xff0c;而且快速排序的代码也是非常重要&#xff0c;需要我们懂了还不行&#xff0c;必须要手撕代码&#xff0c;学的透彻。 在研究快速排序之前&#xff0c;我们首先…

使用 Arduino 实现 PID 控制器

使用 Arduino 实现 PID 控制器 PID controller implementation using Arduino (microcontrollerslab.com) In this article, you will learn how to design PID controller using Arduino. PID controller can implemented using both analog and digital electronics. But in…

Java 基础 and 进阶面试知识点(超详细)

一个 Java 文件中是否可以存在多个类&#xff08;修饰类除外&#xff09;&#xff1f; 一个 Java 文件中是可以存在多个类的&#xff0c;但是一个 Java 文件中只能存在一个 public 所修饰的类&#xff0c;而且这个 Java 文件的文件名还必须和 public 所修饰类的类名保持一致&a…

斯坦福UE4 C++课学习补充 14:UMG-优化血量条

文章目录 一、优化执行效率二、简单脉冲动画 一、优化执行效率 绑定事件需要每一帧检查绑定对象是否有变化&#xff0c;势必造成CPU资源的浪费&#xff0c;因此优化执行效率的思路是&#xff1a;UI组件不再自行每帧查询血量&#xff0c;而是让血量自己在发生变化的同时通知UI进…

软件全过程建设资料,交付资料,方案等

在软件开发过程中&#xff0c;文档扮演着至关重要的角色。它不仅记录了项目的需求、设计和开发过程&#xff0c;还为项目的维护和管理提供了便利。本文将详细介绍软件开发文档的重要性和作用&#xff0c;以及需求分析、软件设计、开发过程、运维管理和项目管理等方面的文档编写…

【机器学习】深入理解损失函数(Loss Functions)

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 深入理解损失函数(Loss Functions)什么是损失函数?常见损失函数类型1. 均方误差…

[译] 深入浅出Rust基金会

本篇是对 RustConf 2023中的Rust Foundation: Demystified这一视频的翻译与整理, 过程中为符合中文惯用表达有适当删改, 版权归原作者所有. 大家好,我是Sage Griffin,我的代词是they/them。我今天来这里是要谈谈Rust基金会。 要了解基金会实际做什么,我们需要理解美国国内税收…

微软第四季度财报预览:增长动力追踪

微软公司即将在2024年7月30日&#xff08;周二&#xff09;美国市场收盘后发布第四季度财务结果。 微软的收益 - 预期如何 美股券商开户通道 市场预计&#xff0c;微软即将到来的2024年第四季度的收入将年增长14.5%&#xff0c;达到644亿美元&#xff0c;高于2023年第四季度…

【Leetcode】二十、记忆化搜索:零钱兑换

文章目录 1、记忆化搜索2、leetcode509&#xff1a;斐波那契数列3、leetcode322&#xff1a;零钱兑换 1、记忆化搜索 也叫备忘录&#xff0c;即把已经计算过的结果存下来&#xff0c;下次再遇到&#xff0c;就直接取&#xff0c;不用重新计算。目的是以减少重复计算。 以前面提…

【.NET 6 实战--孢子记账--从单体到微服务】--开发环境设置

在这一小节&#xff0c;我们将设置开发环境。 一、安装SDK 咱们的项目使用的是 .NET6&#xff0c;开发前我们需要从官网上下载.NET6 SDK&#xff08;点击下载&#xff09;&#xff0c;这里要注意的是我们需要下载.NET6 SDK&#xff0c;而不是 .NET6 Runtiem 。SDK 包含 Runti…

2021真题-架构师案例(四)

问题1&#xff08;16分&#xff09; 针对该系统功能&#xff0c;赵工建议解释器架构风格&#xff0c;李工建议管道过滤架构风格&#xff0c;王工则建议饮食调用&#xff0c;该系统从灵活性和可扩展性考虑&#xff0c;应采用哪种&#xff1f; 解析&#xff1a; 管道-过滤器&am…

这些有用的免费网站和工具,很多人却都不知道

在信息爆炸的今天&#xff0c;很多用户都不知道有哪些免费好用的网站和工具&#xff0c;今天小编就来和大家分享几款免费又好用的网站或工具&#xff0c;以便大家提升工作效率。 滴答清单&#xff1a;高效时间管理 滴答清单是一款广受欢迎的时间管理工具&#xff0c;它可以帮…

【C++】面向对象的软件设计原则

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞 关注支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; &#x1f525;c系列专栏&#xff1a;C/C零基础到精通 &#x1f525; 给大…