Unix系統編程(三)通用的I/O
UNIX IO模型的顯著特點之一是輸出輸出概念的通用性,這意味著,4個同樣的系統調用open,read,write和close可以對所有類型的文件執行IO操作,包括終端之類的設備。因此僅用這些系統調用編寫的程序,對任何類型的文件都有效。臥槽,是不是特別牛逼,妥妥的面相接口的編程啊。
那麽要達到這種效果其實還是要付出一些東西的。
必須確保每一個文件系統和設備都實現了相同的IO系統調用集。由於文件系統或設備所特有的操作細節在內核中處理,在編程的時候可以忽略設備專有的因素。
問題來了,不同的文件系統或者設備肯定會有一些特色的操作,那麽只有4個系統調用肯定是不夠的,應該怎麽辦呢?
這個時候瑞士軍刀ioctl系統調用提供了IO模型之外的專有特性接口。
Unix系統編程(三)通用的I/O
相關推薦
Unix系統編程(三)通用的I/O
clas post 由於 應該 系統 特色 設備 瑞士軍刀 效果 UNIX IO模型的顯著特點之一是輸出輸出概念的通用性,這意味著,4個同樣的系統調用open,read,write和close可以對所有類型的文件執行IO操作,包括終端之類的設備。因此僅用這些系統調用編寫的
Unix系統編程(一)
一個 指向 posix 返回 write 指定 str 讀取 資源 主要內容:文件輸入/輸出的系統調用。 在Linux中,萬事萬物皆文件。 文件描述符的概念 通用I/O模型的系統調用: 打開文件 open 關閉文件 close 向文件寫數據 write 從文件讀
Unix系統編程()open,read,write和lseek的綜合練習
har ring strtol 開始 splay 進制 void oct unsigned 需求:程序的第一個命令行參數為將要打開的文件名稱,余下的參數則指定了文件上執行的輸入輸出操作。每個表示操作的參數都以一個字母開頭,緊跟以相關值(中間無空格分隔)。 soffet:
Unix系統編程()原子操作和競爭條件
例子 one cpu order https alt left 發生 see 競爭狀態是這樣一種情形:操作共享資源的兩個進程(或線程),其結果取決於一個無法預期的順序,即這些進程獲得CPU使用權的先後相對順序。 以獨占的方式創建一個文件 當同時指定了O_EXCL和O
Unix系統編程()文件控制操作fcntl
系列 文件描述 類型 d參數 範圍 打開 blog OS 文件控制 fcntl系統調用對一個打開的文件描述符執行一系列的控制操作。 int fcntl(int fd, int cmd, …) cmd參數所支持的操作範圍很廣 fcntl的第三個參數以省略號表示,意
Unix系統編程()進程和程序
初始 調試 ogr 進制 路徑名 目錄 編碼 出了 信號 進程(process)是一個可執行程序(program)的實例。 程序是包含了一系列信息的文件,這些信息描述了如何在運行時創建一個進程,所包括的內容如下所示。 二進制格式標識:每個程序文件都包含用於描述可執行
Unix系統編程()進程內存布局
聲明 使用 ati 刪除 x86 原因 inf art 編譯器 每個進程所分配的內存由很多部分組成,通常稱之為"段(segment)"。 文本段包含了進程運行的程序機器語言指令。文本段具有只讀屬性,以防止進程通過錯誤指針意外修改自身指令。 因為多個進程可同時運行
Unix系統編程()在堆上分配內存
color 所有 地址 lib 堆內存 多線程 brk break 處的 在堆上分配內存:malloc和free 一般情況下,C程序使用malloc函數族在堆上分配和釋放內存。較之brk和sbrk,這些函數具備不少優點: 屬於C語言標準的一部分 更易於在多線程程序中
Unix系統編程()malloc和free的實現
原因 編程錯誤 alloc 系統編程 OS 內存分配 continued 我們 如何 盡管malloc和free所提供的內存分配接口比之brk和sbrk要容易許多,但在使用時仍然容易犯下各種編程錯誤。 理解malloc和free的實現,將使我們洞悉產生這些錯誤的原因
Unix系統編程()信號處理器簡介
pos 簡介 post 類型 內核 class 參數傳遞 處理 信號 信號處理器簡介 信號處理器程序(也稱為信號捕捉器)是當指定信號傳遞給進程時將會調用的一個函數。 這裏會學習信號處理器的基本原理,後面將繼續學習。 調用信號處理器程序,可能會隨時打斷主程序流程;內核代
Unix系統編程()發送信號的其他方式:raise和killpg
self AD HR blog xxxx 這一 val 因此 ise 有時,進程需要向自身發送信號,raise 函數就執行了這一任務。 #include <signal.h> int raise(int sig); 在單線程程序中,調用raise相當於對k
Linux系統編程(2)
linux系統編程一 exec函數 e:env int execle(const char *path, const char *arg,..., char * const envp[]); 環境變量指針數組: char *envp[] = {"環境變量名=內容",NULL};
linux系統編程(3)
linux系統編程一 線程間同步 同步:相互之間配合完成一件事情 互斥:保證訪問共享資源的完整性(有你沒我) POSIX 線程中同步:使用信號量實現 信號量 : 表示一類資源,它的值表示資源的個數 對資源訪問: p操作(申請資源) [將資源的值 - 1] .... V操作(釋放資源) [將資源的值
linux系統編程(4)
linux系統編程一 IPC 對象 ---- 消息隊列 IPC 對象命令 (1)查看系統中IPC對象 ipcs -a 顯示所有的IPC對象 ipcs -s/-q/-m (2)刪除系統中的IPC對象 ipcrm -q/-s/-m ID 1.獲得key值 第一種:
Python編程(三)字符編碼與文件處理
python3 固定 one 加載 not rdl 寫到 bin 存在 計算機要想工作必須通電,也就是說‘電’驅使計算機幹活,而‘電’的特性,就是高低電平(高低平即二進制數1,低電平即二進制數0),也就是說計算機只認識數字 編程的目的是讓計算機幹活,而編程的結果說白
並發編程(三):從AQS到CountDownLatch與ReentrantLock
splay public 繼續 for admin font 通信 html integer 一、目錄 1、AQS簡要分析 2、談CountDownLatch 3、談ReentrantLock 4、談消費者與生產者模式(not
12.5-全棧Java筆記:Java網絡編程(三)
java上節回顧:在學習了Socket在建立客戶端和服務器單項通訊中,分別創建獨立的Socket,並通過Socket的屬性。那麽如何將兩個Socket進行連接,從而達到客戶端和服務器之間建立輸入輸出流進行通信呢?在上節中我們已經講到,TCP/IP套接字是最可靠的雙向流協議,使用TCP/IP可以發送任意數量的數
Bash編程(三)
bash編程 if語句 一、bash交互式編程 腳本參數: 用戶交互://linux的重要思想,盡量避免和用戶交互 1.腳本傳遞參數, a.sh tom jery 2.通過鍵盤獲取數據 read //
Oracle學習系類篇(三)
eat procedure body str 分組 錯誤 style mage 可見 1. 存儲過程 CREATE OR REPLACE PROCEDURE SP_NAME( PM_NAME [IN/OUT/IN OUT] PM_TYPE...)
PL/SQL 編程(三 )程序包和包體,觸發器,視圖,索引
rep upd 索引 itl 數據檢索 一鍵 代碼 dep pl/sql conn scott/tiger; grant insert,update,delete on emp to system; conn system/orcl1234; create or