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>\n",argv[0]);
        return -1;
    }

    int fd1,fd2;
    char buf[M];
    int count = -1;

    memset(buf, '\0', 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命令比較兩個文件,沒有差異,完全一樣,說明拷貝成功了。

 

微信公衆號:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章