小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

Linux open函數(shù)簡介

 raymoon_sure 2014-05-20
http://blog.sina.com.cn/s/blog_54f82cc201010oow.html

Linux系統(tǒng)是如何區(qū)分普通文件與設(shè)備驅(qū)動文件的研究一 
文件的打開 
一般來說對于文件或者是設(shè)備的操作都是從open開始的,我們首先要打開這個設(shè)備節(jié)點或者是普通文件,才可以對這個文件進行read、write、ioctl、mmap等操作。所以一切的起源于open。我們首先從open開始研究。 
在linux系統(tǒng)進程當中,分為內(nèi)核空間和用戶空間。當我們在用戶空間通過open之后,會產(chǎn)生一個軟中斷,然后通過系統(tǒng)調(diào)用陷入內(nèi)核空間。通過系統(tǒng)調(diào)用號,我們可以跳轉(zhuǎn)到該中斷例程的入口地址,我們接著看內(nèi)核源碼的實現(xiàn)。 
1、在arch/x86/include/asm/unistd_32.h中定義了系統(tǒng)調(diào)用號



open 函數(shù)用于打開和創(chuàng)建文件。以下是 open 函數(shù)的簡單描述

        #include <fcntl.h>

        int open(const char *pathname, int oflag, ... );

       返回值:成功則返回文件描述符,否則返回 -1

對于 open 函數(shù)來說,第三個參數(shù)(...)僅當創(chuàng)建新文件時才使用,用于指定文件的訪問權(quán)限位(access permission bits)。pathname 是待打開/創(chuàng)建文件的路徑名(如 C:/cpp/a.cpp);oflag 用于指定文件的打開/創(chuàng)建模式,這個參數(shù)可由以下常量(定義于 fcntl.h)通過邏輯或構(gòu)成。

O_RDONLY      只讀模式
O_WRONLY      只寫模式
O_RDWR        讀寫模式

打開/創(chuàng)建文件時,至少得使用上述三個常量中的一個。以下常量是選用的:

O_APPEND       每次寫操作都寫入文件的末尾
O_CREAT        如果指定文件不存在,則創(chuàng)建這個文件
O_EXCL         如果要創(chuàng)建的文件已存在,則返回 -1,并且修改 errno 的值
O_TRUNC        如果文件存在,并且以只寫/讀寫方式打開,則清空文件全部內(nèi)容
O_NOCTTY       如果路徑名指向終端設(shè)備,不要把這個設(shè)備用作控制終端。
O_NONBLOCK     如果路徑名指向 FIFO/塊文件/字符文件,則把文件的打開和后繼 I/O設(shè)置為非阻塞模式(nonblocking mode)

以下三個常量同樣是選用的,它們用于同步輸入輸出

O_DSYNC        等待物理 I/O 結(jié)束后再 write。在不影響讀取新寫入的數(shù)據(jù)的前提下,不等待文件屬性更新。
O_RSYNC        read 等待所有寫入同一區(qū)域的寫操作完成后再進行
O_SYNC         等待物理 I/O 結(jié)束后再 write,包括更新文件屬性的 I/O

open 返回的文件描述符一定是最小的未被使用的描述符。

    如果 NAME_MAX(文件名最大長度,不包括'\0')是 14,而我們想在當前目錄下創(chuàng)建文件名長度超過 14 字節(jié)的文件,早期的 System V 系統(tǒng)(如 SVR2)會截斷超出部分,只保留前 14 個字節(jié);而由 BSD 衍生的(BSD-derived)系統(tǒng)會返回錯誤信息,并且把 errno 置為 ENAMETOOLONG。

    POSIX.1 引入常量 _POSIX_NO_TRUNC 用于決定是否截斷長文件名/長路徑名。如果_POSIX_NO_TRUNC 設(shè)定為禁止截斷,并且路徑名長度超過 PATH_MAX(包括 '\0'),或者組成路徑名的任意文件名長度超過 NAME_MAX,則返回錯誤信息,并且把 errno 置為 ENAMETOOLONG。

what is the difference between

fopen and open
fread and read
fwrite and write
open and creat



    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多