前言

文件IO,又称系统IO系统调用

打开 open

流程:1.创建一个.c在vim中编译

2.引入头文件

        #include<unistd.h>#include<fcntl.h>#include<errno.h>#include<stdio.h>#include<stdlib.h>#include<string.h>#include<unistd.h>

3.代码

int fd  =  open("3.txt",O_RDWR|O_CREAT,0777);

4.代码说明

设定返回值类型      一般打开是int型的

利用open打开(“文件名和文件类型”,O大写_方式(只读/只写/读写)|或O_CREAT没有创建,0xxx权限分配)

5.判定是否打开成功,要严谨

   if(fd<0){printf("qnmd\n");printf("error no",errno);}else{printf("succ %d\n",fd);}

就是从文件中读取数据

模式:O_RDONLY或者O_RDWR(只读模式/读写模式)

函数:read(fd,buf,读多少)

代码:

     int fd = open("3.txt",O_RDONLY);int ret = read(fd,buf,20);

buf是提前定义好的一个空数组;

将东西写进文件中

模式:O_WRONLY  或者 O_RDWR(只写、读写)

函数:write(fd,buf,20)

代码:

    char bufw[100] = "JDG WIN";int ret1 = write(fd,bufw,20);

读写    :    RDWR

#include<stdio.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<unistd.h>
int main()
{   char buf[50] = "asd123456789qwe3ra aea aqe awqaea";char buf1[50] = {'\0'};int fd=open("1.txt",O_RDWR);if(fd<0){printf("qnmd");}int ret3 = write(fd,buf,40);int ret4 =read(fd,buf1,10);printf("nris : %s\n",buf1);close(fd);return 0;
}

文件描述符

在 Linux 的世界里,一切设备皆文件。对文件的操作都是通过文件描述符(fd)来进行的。

文件描述符:是内核为了高效管理已被打开的文件所创建的索引,是一个非负整数用于指代被打开的文件,所有执行I/O操作的系统调用都是通过文件描述符。说白了就是你自定的那个fd......本质其实类似数组下标0123456789.....(0 1 2)一般被  ’流‘ 占用。

文件属性

一般分为阻碍与非阻碍

fcntl函数

需要头文件: #include<fcntl.h>

作用:改文件的属性

关键点: F_GETL获取文件状态

F_SETL设置文件状态

       int ret = fcntl(STDIN_FILENO,F_SETFL,flag);

完整代码:

#include<unistd.h>
#include<fcntl.h>
#include<errno.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>int main(){char buf[10];int n,fd;int flag = fcntl(STDIN_FILENO,F_GETFL);if(flag<0){perror("get failed\n");}flag |=O_NONBLOCK;int ret = fcntl(STDIN_FILENO,F_SETFL,flag);if(ret<0){perror("get failed\n");}int i;for(i=0;i<5;i++){n=read(STDIN_FILENO,buf,10);if(n>0){break;}if(n<0){if(errno!=EAGAIN){perror("error result\n");}else{write(STDIN_FILENO,"try again\n",strlen("try again\n"));sleep(3);}}}  if(i==5){write(STDOUT_FILENO,"TIME OUT\n",strlen("TIME OUT\n"));}else{write(STDOUT_FILENO,buf,n);}close(fd);return 0;
}

lessk函数

作用:修改读写位置

lseek(fd,-6,SEEK_END);

文件首
SEEK- SET       ==0

文件当前位置
SEEK- CUR      ==1

文件尾
SEEK- END      ==2

完整代码

#include<unistd.h>
#include<fcntl.h>
#include<errno.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>int main(){int fd,b;char msi[50] = "it is my life\n";char ch;fd = open("life.txt",O_RDWR|O_CREAT,0777);if(fd<0){printf("qnmd\n");}write(fd,msi,strlen(msi));lseek(fd,-6,SEEK_END);while(b=read(fd,&ch,1)){if(b<0){printf("qnmd");}else if(b==0){printf("it is end\n");}else{write(STDOUT_FILENO,&ch,b);}}close(fd);
return 0;
}

truncate函数

短截文件

od

一个命令

作用:显示文件

可以加:

dup/dup2

作用:修改文件描述符

参数:一个文件描述符如:fd 返回一个新的文件描述符:如自己输一个newfd

 int fd = open("dp.txt",O_RDWR|O_CREAT,0777);if(fd<0){printf("qnmd\n");}int newfd = dup(fd);

dup2

就是俩文件描述符 超级加倍

上代码

#include<unistd.h>
#include<fcntl.h>
#include<errno.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>
int main(){int fd = open("dp.txt",O_RDWR|O_CREAT,0777);if(fd<0){printf("qnmd\n");}int fd2 = open("dp2.txt",O_RDWR|O_CREAT,0777);int newfd = dup2(fd,fd2);write(fd,"hello\n",strlen("hello"));write(fd2,"hi\n",strlen("hello"));write(newfd,"fku\n",strlen("hello"));printf("%d  %d  %d  ",fd,fd2,newfd);  close(fd);close(fd2);close(newfd);return 0;
}

复习标准io

linux下的文件操作IO相关推荐

  1. Linux下对文件操作时出现乱码怎么办?

    Linux下对文件操作经常会遇见乱码问题,我在网上搜了一些解决方法,希望能对大家有所帮助. 如果你需要在Linux中操作windows下的文件,那么你可能会经常遇到文件编码转换的问题.Windows中 ...

  2. linux下怎么批量命名文件,linux下的文件操作——批量重命名

    概述:在日常工作中,我们经常需要对一批文件进行重命名操作,例如将所有的jpg文件改成bnp,将名字中的1改成one,等等.文本主要为你讲解如何实现这些操作 1.删除所有的 .bak 后缀: renam ...

  3. c++ windows获得当前工作目录文件_基于linux下Python文件操作

    Python中的文件操作 1.文件的打开与关闭 想一想:如果想用word编写一份简历,应该有哪些流程呢? 1.打开word软件,新建一个word文件 2.写入个人简历信息 3.保存文件 4.关闭wor ...

  4. linux 文件操作函数,Linux下的文件操作函数及creat用法

    编写Linux应用程序要用到如下工具: (1)编译器:GCC GCC是Linux平台下最重要的开发工具,它是GNU的C和C++编译器,其基本用法为:gcc [options] [filenames]. ...

  5. C语言linux下的文件操作(1)

    文件操作: 欢迎加入QQ:498903810 一起交流.讨论知识,里面有大佬,也有小白,天下码农一家亲,大家一起讨论进步. 1.静态文件(Inode) 硬盘中的文件,就是静态文件.每一个文件都是以多个 ...

  6. Linux下对文件的操作及添加新用户

    Linux下对文件的操作及添加新用户 一.对文件的操作 1.打包压缩文件 2.解压缩文件 3.对文件操作的其他命令 二.创建新用户 一.对文件的操作 1.打包压缩文件 2.解压缩文件 3.对文件操作的 ...

  7. Linux 下的五种 IO 模型

    Linux 下的五种 IO 模型 来源:decaywood's Blog 概念说明 用户空间与内核空间 现在操作系统都是采用虚拟存储器,那么对32位操作系统而言,它的寻址空间(虚拟存储空间)为4G(2 ...

  8. linux下的五种io模型,Linux下的五种IO模型

    Java中提供的IO有关的API,在文件处理的时候,其实依赖操作系统层面的IO操作实现的(关于Java对IO的三种封装,可见我的另一篇博客) 开门见山,Linux下的如中IO模型:阻塞IO模型,非阻塞 ...

  9. linux 网络io命令详解,Linux下五种网络IO模型详解

    本文我们主要来了解一下Unix/Linux下5种网络IO模型:blocking IO, nonblocking IO, IO multiplexing, signal driven IO, async ...

最新文章

  1. 使用同一个目的port的p2p协议传输的tcp流特征相似度计算
  2. 再读simpledb 之 元数据管理(3)
  3. python 切割字符串
  4. 数据中心怎么关机?光有UPS还不够
  5. mysql 逻辑处理_mysql 逻辑查询处理流程
  6. ubuntu 16.04 + apache2 将php7.1 切换到 php7.3
  7. [设计模式] - Singleton单例模式
  8. 启动两个tomcat,两个端口,两个tomcat都启动时回显示端口被占用
  9. 写一个自动阅读的方法(需要运用html和css和JavaScript)
  10. js将html替换字符串,js 替换字符串指定内容 javascript 替换指定位置的字符
  11. 如何设置win7计算机不更新,win7系统不要自动更新的设置步骤(图文)
  12. pthread 立即停止线程_pthread_create线程终止问题
  13. java.awt.Color 颜色代码对照表
  14. ubuntu中/usr目录下无法直接复制粘贴文件或目录
  15. 自动化测试 —— Pytest测试框架
  16. 3D方面的一些英文词汇解释
  17. 我弟今年高考,报的志愿是电子信息,到现在录取的是计算机科学与技术,哪个专业更好一些,2021年电子信息科学与技术专业大学排名及分数线【统计表】...
  18. vue 实现级联选择器
  19. Method threw ‘io.netty.util.IllegalReferenceCountException‘ exception.
  20. 嵌入式数据库SQLite

热门文章

  1. 介绍什么是同源和什么是跨域,以及三种解决跨域问题的路径
  2. flink事件属于窗口的计算方法
  3. 全基因组关联分析(GWAS)实现途径之一
  4. linux网络ip及其他
  5. ORB-SLAM中的重定位解读及追踪
  6. Java基础复习-常用类
  7. java+swagger+侵入_Spring boot+Swagger配置无侵入式Restful接口(二)
  8. springboot+状态机
  9. pyqt5表格显示mysql_PyQt5调入数据库数据在表格中显示
  10. css六边形插入图片蜂巢幻灯代码,纯css绘制蜂巢六边形效果