zoukankan      html  css  js  c++  java
  • Linux 文件IO简单实例

    目录

     

    简述

    代码

    编译运行


    简述

    Linux下的所有资源都被抽象为文件,所以对所有资源的访问都是以设备文件的形式访问,设备文件的操作主要包括:打开、关闭、读、写、控制、修改属性等。下面的示例代码主要是对文本文件的拷贝。

    其实对于一些复杂一点的设备,主要操作也是类似,比如摄像头,在linux下也是一个设备文件,打开之后,可以读取摄像头的参数,然后可以读取图像数据,读取到的图像数据可以编码后保存到文件中,这就是录像的过程,也可以把读到的图像数据送到LCD显示屏的帧缓存去显示出来。

    再比如串口的操作,在Linux下,对于串口通信,也是设备文件的读写操作:打开设备文件--->配置参数(波特率、停止位、校验位等)--->读取/写入数据。

    代码

    #include <stdio.h>
    #include <unistd.h>
    #include <string.h>
    #include <fcntl.h>
    #include <sys/types.h>
    #include <sys/stat.h>
    
    
    #define M 128
    
    int 
    main(int argc, char **argv)
    {
        if(argc < 3){
            printf("Usage:%s,<file1>,<file2>
    ",argv[0]);
            return -1;
        }
    
        int fd1,fd2;
        char buf[M];
        int count = -1;
    
        memset(buf, '', M);
        if((fd1 = open(argv[1],O_RDONLY)) == -1){
            perror("open file1 error:");
            return -1;
        }
        if((fd2 = open(argv[2],O_RDWR | O_CREAT,0644)) == -1){
            perror("open file2 error:");
            return -1;
        }
    	
        while(count != 0){
            if((count = read(fd1,buf,M)) == -1){
                perror("read file1 error:");
                return -1;
            }
    
            if((count = write(fd2,buf,count)) == -1){
                perror("write error:");
                return -1;
            }
        }
        close(fd1);
        close(fd2);
        return 0;
    }
    

    编译运行

    gcc copy.c -o copy
    
    ./copy copy test
    
    $ ls
    copy  copy.c  test
    
    $ diff copy test  
    $
    

    运行结果,程序对其自身拷贝了一份为test的文件,用diff命令比较两个文件,没有差异,完全一样,说明拷贝成功了。

  • 相关阅读:
    P4165 [SCOI2007]组队
    CF575B
    SG函数胡乱一气
    CF280C Game on Tree
    AGC010F
    CF140E
    多功能的低功耗蓝牙可穿戴设备用于监测血液酒精浓度
    智能手环幕后的英雄
    图像处理实用资源
    15.12DataGridView分页显示
  • 原文地址:https://www.cnblogs.com/fensnote/p/13436446.html
Copyright © 2011-2022 走看看