首页 > 系统相关 >Linux系统编程-文件IO

Linux系统编程-文件IO

时间:2023-01-28 14:59:11浏览次数:39  
标签:文件 调用 int 编程 描述符 IO Linux include

文件IO

标准库IO函数和linux系统调用IO函数的区别:

  1. 标准C库的文件IO函数是跨平台的,在不同的平台上调用不同的系统API

  2. 标准C库的IO函数有缓冲区,而linux系统调用的没有缓冲区

    因此,在网络通信时尽量使用系统调用提高效率,而在读写磁盘时尽量使用库函数减少读写次数

标准库函数和系统调用的关系是 调用与被调用 的关系

文件描述符

在PCB中有一个文件描述符表,记录这个进程打开的所有文件信息。一般默认大小是1024,有3个默认打开的文件:标准输入,标准输出,标准错误默认都是打开的状态,文件描述符分别是0,1,2。这三个文件都指向当前终端 /dev/tty

每次新打开一个文件都会分配一个最小的可分配的文件描述符。

对于同一个进程,可以对同一个文件打开多次,每次分配的文件描述符是不一样的

常用函数

1. 对文件的操作函数

  1. open() 打开一个存在的文件 或者 创建一个新文件

  2. close() 关闭一个打开的文件,文件描述符被释放掉

    /*
    	int open(const char *pathname, int flags);
        int open(const char *pathname, int flags, mode_t mode);
        参数:
        	-pathname: 包括文件名的路径
        	-flags: O_WRONLY, O_RDONLY, O_RDWR, 可选项 O_APPEND  O_CREAT, 用|连接
        	-mode: 若需要创建文件,则传入要创建的文件权限,八进制 例如0664
    				最终权限是 mode&~umask
            		不同的用户的umask是不同的,直接输入umask就能查看,可以自己设置
            		umask的作用就是抹去某些权限,使得权限更加合理
    	返回值: 调用失败返回-1,否则返回文件描述符
    */
    #include <sys/types.h>
    #include <sys/stat.h>  
    #include <fcntl.h>   
    
    #include <stdio.h>
    #include <unistd.h>
    int main(){
        int fd = open("a.txt", O_RDONLY);
        if(fd == -1){
            perror("open: ");
        }
        close(fd);
        return 0;
    }
    
  3. read() 读数据

  4. write() 写数据

    read_write

  5. lseek()

  6. stat()

标签:文件,调用,int,编程,描述符,IO,Linux,include
From: https://www.cnblogs.com/Yuqi0/p/17070284.html

相关文章

  • Vue3数据对接报错(Unhandled error during execution of render function )
    如图:、 意思就是说:多了个value,在渲染div的时候,一些部分不应该有value查看一下传输数据的时候中间是否有null值的,或者无效值 ......
  • linux安装nginx
    一、安装准备(参考https://tech.powereasy.net/cpzsk/wzfwqwlaq/content_23804)1. 离线安装需要依赖GCC,通过以下命令可以检查GCC是否安装gcc–version银河麒麟是系统默......
  • 后端跨域问题导致java.io.IOException: UT010029: Stream is closed解决办法
    转载自:https://blog.csdn.net/qq_45925197/article/details/126708024背景下载文件压缩成zip包接口,postman自测没问题,但在和前端联调的时候前端就会出现如下跨域的报错......
  • DELL OpenManage Server Administrator (OMSA) for Linux安装
    1.下载和安装软件包从Dell官网(选择对应的机器和操作系统版本)下载DellOpenManageServerAdministrator软件包: 以下步骤是在DellR730和redhat7.5上运行的案例:1.使......
  • minio分布式存储的go语言开发衔接
    minio是分布式存储,可集群部署,阵列磁盘,纠错码等大数据存储必备的技术。由于它是go语言开发的,我们用go来与它衔接:上传文件,比如图片,然后预览。这里涉及几个重要的知识点。一......
  • JDK版本对应其major version
    JDK版本 major.minorversionJavaSE6 50JavaSE7 51JavaSE8 52JavaSE9 53JavaSE10 54JavaSE11 55JavaSE12 56JavaSE13 57JavaSE14 58JavaSE15 59JavaS......
  • 一个计算矩形体的数学编程题记录
    题目大概如下:给定一个给定大小的立方体:2x3x6;3x3x3;3x5x6;之后计算这个立方体中小矩形的数量,组成一个最小的其中单位的大小为1,也就是最小的立方体在原立方体中占的......
  • 引子 - 实现轻量的 ioc 容器
    IoC反转控制原则也被叫做依赖注入DI,容器按照配置注入实例化的对象.假设A的相互依赖关系如下图,如何将A对象实例化并注入属性.本文将实现一个轻量化的IoC......
  • linux基本命令
    tail-1000fxx.out  实时查看文件catxx.out 查看文件more查看全部内容pwd 查看当前位置rm删除 rm-rf删除任何文件touch 创建文件grep过滤 参考:......
  • js中function的写法
    js文件中function的写法//Js代码functionfoo(){console.log('helloworld');}foo();//用匿名函数:varfoo=function(){console.log('helloworld')......