1. 程式人生 > >Linux系統程式設計-檔案IO(一)

Linux系統程式設計-檔案IO(一)

最近在在實驗樓上學Linux,做點筆記。上面的課程對於學習linux還不錯,有興趣可以看看。
檔案IO:
Linux提供給了使用者程式一些介面,用來呼叫執行相關的功能。大多數Linux檔案I\O只需要用到5個函式:open,read,write,lseek和close
檔案描述符:
檔案描述符是一個非負整數。當開啟一個現存檔案或建立一個新檔案時,核心向程序返回一個檔案描述符。當寫一個檔案時,用open或create返回的檔案描述符標識該檔案,將其作為引數傳送給read或write。
整數0、1、2被代換成符號常數:

STDIN_FILENO(標準輸入,預設是鍵盤)
STDOUT_FILENO(標準輸出,預設是螢幕)
STDERR_FILENO(標準錯誤輸出,預設是螢幕)

這些常數都定義在標頭檔案<unistd.h>中,檔案描述符的範圍是0~OPEN_MAX
1. open
需要包含的標頭檔案:<sys/types.h>,<sys/stat.h>,<fcntl.h>
函式原型:int open(const str *pathname, int oflag, […, mode_t mode])
功能:開啟檔案 返回值:成功則返回檔案描述符,出錯返回-1
引數:
pathname:開啟或建立檔案的絕對路徑
oflag:可用來說明此函式的多個選擇項
oflag 引數由O_RDONLY(只讀開啟)、O_WRONLY(只寫開啟)、O_RDWR(讀寫開啟)中的一個和下列一個或多個常陣列成
O_APPEND: 追加到檔案尾
O_CREAT: 若檔案不存在則建立它。使用此選擇項時,需同時說明第三個引數mode,用其說明新聞件的訪問許可權
O_EXCL: 如果同時指定O_CREAT,而該檔案又是存在的,報錯;也可以測試一個檔案是否存在,不存在則建立。
O_TRUNC: 如果次檔案存在,而且為讀寫或只寫成功開啟,則將其長度截短為0
O_SYNC: 使每次write都等到物理I\O操作完成
mode:建立新檔案的時候用來設定其許可權設定
例子:

    #include <stdio.h>
    #include <stdlib.h>
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <fcntl.h>

    int main()
    {
        if(open("./test.txt", O_RDONLY | O_CREAT | O_EXCL, 0777) == -1)
        {
            printf("it already exists!");
            exit(-1);
        }
        else
        {
            printf("creat successfully!");
        }
        return 0;
    }  

2. read
需要包含的標頭檔案:<unistd.h>
函式原型:
ssize_t read(int fd, void *bf, size_t count)
功能:
從開啟的檔案中讀取資料。
返回值:
實際讀到的位元組數;如果讀到了檔案尾,返回0,出錯的話返回-1;ssize_t是系統標頭檔案中用typedef定義的資料型別,相當於signed int。
引數:
fd:要讀取的檔案的描述符
buf:得到的資料在記憶體中的位置的首地址
count:期望本次能讀取到的最大位元組數
3. write
需要包含的標頭檔案:<unistd.h>
函式原型:
ssize_t write(int fd, const void *buf, size_t count)
功能:向開啟的檔案寫資料
返回值:寫入成功後返回寫入的位元組數,出錯返回-1
引數:
fd:要寫入的檔案的描述符
buf:要寫入檔案的資料在記憶體中存放位置的首地址
count:期望寫入的資料的最大位元組數

    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>

    int main()
    {
        char buf[100];
        int num = 0;
        if ((num = read(STDIN_FILENO, buf, 10)) == -1) {
            printf ("read error");
            error(-1);
        } else {
        // 將鍵盤輸入又輸出到螢幕上
            write(STDOUT_FILENO, buf, num);
        }

        return 0;
    }
  1. close
    需要包含的標頭檔案:
    unistd.h
    函式原型:
    int close(int filedes)
    功能:
    關閉一個開啟的檔案
    引數:
    需要關閉的檔案描述符
  2. lseek
    需要包含的標頭檔案:<sys/types.h> <unistd.h>
    函式原型:
    off_t lseek(int filesdes, off_t offset, int whence)
    功能:
    設定檔案記憶體讀寫位置
    返回值:
    成功的話返回新的檔案位移,出錯返回-1
    off_t是系統標頭檔案定義的資料型別,相當於signed int
    引數:
    filesdes:要寫入的檔案的描述符
    whence是SEEK_SET, 那麼該檔案的位移量設定為據檔案開始處offset個位元組
    whence是SEEK_CUR, 那麼該檔案的位移量設定為當前值加offset。offset可為正或負
    whence是SEEK_END, 那麼該檔案的位移量設定為檔案長度加offset。offset可為正或負

相關推薦

Linux系統程式設計-檔案IO()

最近在在實驗樓上學Linux,做點筆記。上面的課程對於學習linux還不錯,有興趣可以看看。 檔案IO: Linux提供給了使用者程式一些介面,用來呼叫執行相關的功能。大多數Linux檔案I\O只需

linux系統程式設計-檔案IO操作

四個主要的系統呼叫函式解釋 open() 函式可以開啟一個已經存在的檔案,也能建立並開啟一個檔案 #include <sys/stat.h> #include <fcntl

三、Linux系統程式設計-檔案IO()檔案的開啟和關閉

#include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <string.h> #include <stdio.h> #include <stdlib.h

Linux系統程式設計--檔案()

1.系統程式設計 系統呼叫:應用程式同系統之間的介面。由作業系統實現提供的所有系統呼叫所構成的集合即程式介面或程式設計介面。 封裝系統呼叫:更加方便程式設計師使用,跨平臺。 百度 這個概念看書時候第一次遇到,百度了一下,看完只能說是有了一個模糊的概念。封

linux系統程式設計之程序()

本節目標:什麼是程式什麼是程序程序資料結構程序與程式區別與聯絡一,什麼是程式?程式是完成特定任務的一系列指令集合二,什麼是程序?從使用者的角度來看程序是程式的一次動態執行過程從作業系統的核心來看,程序是作業系統分配的記憶體、CPU時間片等資源的基本單位。程序是資源分配的最小單位每一個程序都有自己獨立的地址空間

嵌入式 Linux系統程式設計)——檔案IO

嵌入式 Linux系統程式設計(一)——檔案IO一、檔案IO概念        linux檔案IO操作有兩套大類的操作方式:不帶快取的檔案IO操作,帶快取的檔案IO操作。不帶快取的屬於直接呼叫系統呼叫(

Linux系統程式設計:標準IO檔案IO的區別

首先了解下什麼是標準IO以及檔案IO。 標準IO:標準I/O是ANSI C建立的一個標準I/O模型,是一個標準函式包和stdio.h標頭檔案中的定義,具有一定的可移植性。標準IO庫處理很多細節。例如快取分配,以優化長度執行IO等。標準的IO提供了三種類型的快取。

Linux系統程式設計(4)——檔案IO之ioctl函式

ioctl是裝置驅動程式中對裝置的I/O通道進行管理的函式。所謂對I/O通道進行管理,就是對裝置的一些特性進行控制,例如串列埠的傳輸波特率、馬達的轉速等等。它的引數個數如下:int ioctl(int fd, int cmd, …);其中fd就是使用者程式開啟裝置時使用ope

Linux程式設計——檔案 IO操作

   Linux檔案 I\O 介紹     1. Linux系統呼叫     Linux系統呼叫(system call)是指作業系統提供給使用者程式的一組“特殊介面”,使用者程式可以通過這組“特殊”介面來

linux系統程式設計)--時間與錯誤處理

#inlcude<error.h> errno perror(); //列印錯誤 strerror //列印錯誤 #inlcude<time.h> //使用CLOCKS_PER_SEC //常量可以得到秒數 clock_t \\ typedef

Linux----網路程式設計IO複用之epoll系統呼叫函式)

伺服器端epoll.c #include <stdio.h> #include <string.h> #include <stdlib.h> #include <assert.h> #include <unistd.h&

Linux系統程式設計學習常見問題():VMware虛擬機器下Ubuntu18.04突然上不了網的問題解決方案

問題描述:VMware虛擬機器下Ubuntu18.04突然上不了網的問題:如下圖所示:   更改這裡的三種連線方式都是這樣  2.  分析:IP衝突或者配置出了問題,需重新更新設定。 3.  解決: (1)將模式調整為

linux系統程式設計(二)--檔案操作

1.0    檔案描述符         每個程序啟動後會自動開啟三個檔案描述符 0、1、2             分別對應於巨集 STDIN_FIL

Linux系統程式設計---實現目錄或者檔案拷貝

關於拷貝檔案,前面寫過一個例子:點選開啟連結 ,可以看看,實現cp命令。這次我們實現一個目錄和檔案的拷貝,綜合點。#include <stdio.h> #include <fcntl.

Linux程式設計------檔案IO(三) 檔案共享和fcntl函式

檔案共享 一個程序打開了兩個檔案 檔案表條目(file-table-entry):    1.檔案狀態標誌(file-status-flags): 讀/寫/追加/同步/

Linux C程式設計IO檔案拷貝

Linux C程式設計:IO 1.1檔案拷貝 本次檔案拷貝需要使用到如下三個函式原型: 開啟檔案 FILE * fopen(const char * path,const char * mode); 相關函式:open,fclose,fopen_

Linux系統程式設計---IO操作

1.系統呼叫 系統呼叫效率較低 1.系統呼叫開銷大,要從使用者空間切換到核心空間,然後切換回使用者空間 2.系統呼叫與底層驅動相關,不一定能夠按指定一次寫完。write函式 #include <unistd>​ size_t write(int files,

Linux系統程式設計學習筆記(1)-檔案的I/O操作

概述 在Linux系統下,通常以一個非負整數來代指一個開啟的檔案,這些檔案可以包括終端,socket,裝置,普通檔案等等。規定的三個標準的檔案描述符為0,1,2下面分別介紹(在互動式shell中,這些檔案描述符通常指向shell執行所在的終端): 檔案描述

Linux 系統程式設計學習-檔案I/O操作

一、非緩衝檔案操作 執行非緩衝檔案操作後,應用程式將立即獲取或傳送資料,非緩衝檔案操作的函式只有:read(),write()。 從檔案中將資訊講到到指定的記憶體區域中read(檔案識別符號,記憶體塊指標,記憶體塊長度); 返回值是實際讀取的長度,沒有讀取到資料返回0,錯誤

Linux系統程式設計——系統呼叫之 I/O 操作(檔案操作)

一、檔案描述符 在 Linux 的世界裡,一切裝置皆檔案。我們可以系統呼叫中 I/O 的函式(I:input,輸入;O:output,輸出),對檔案進行相應的操作( open()、close()、write() 、read() 等)。 開啟現存檔案或新建檔案時,系統(核心