Linux編程手冊讀書筆記第四章(20140407)

  1. 標準文件描述符定義在<unistd.h>中,STDIN_FILENO,? STDOUT_FILENO,? STDERR_FILENO
  2. 打開一個文件:open()

? ? ? include<sys/stat.h>

? ? ? #include<fcntl.h>

? ? ? int open(const char *pathname, int flags, …/* mode_t mode*/);

? ? ? 1)調用發生錯誤,open返回-1,并將errno設置為相應的錯誤標志。

? ? ? 2flags為位掩碼,用于指定文件的訪問模式,O_CREATE O_RDONLY, O_WRONLY,? O_RDWRO_APPEND; ? 注:因是位掩碼,O_RDWR不等同于O_RDONLYO_WRONLY

? ? ? 3mode為位掩碼,用于指定文件的訪問權限。如果open? flags參數并沒有指定O_CREATE標志,則可以省略mode參數。

  1. O_EXCL,此標志與O_CREATE標志結合使用表明如果文件已經存在,則不會打開文件,且open()調用失敗,返回錯誤,errnoEEXIST。換言之,此標志確保了調用者(open()的調用進程)就是創建文件的進程。
  2. 讀取文件內容:read()

? ? ? include<unistd.h>

? ? ? ssize_t read(int fd, void * buffer, size_t count);

? ? ? 1)如果read()調用成功,將返回實際讀取的字節數,如遇到文件結束(EOF)則返回0

? ? ? 2)從終端讀取字符,一遇到換行符(\n),read()調用就會結束。

  1. 數據寫入文件:write()

? ? ? include<unistd.h>

? ? ? ssize_t write(int fd, void * buffer, size_t count);

? ? ? write()調用成功,將返回實際寫入文件的字節數

  1. 關閉文件:close()

? ? ? include<unistd.h>

? ? ? int close(int fd);

?? ? close()可能執行失敗:企圖關閉一個未打開的文件描述符;或者兩次關閉同一個文件描述符。

  1. size_t: 無符號整數類型;? ? ? ? ? ssize_t:有符號的整數類型;?
  2. 改變文件偏移量:lseek()

? ? ? #include<unistd.h>

? ? ? off_t lseek(int fd, off_t offset, int whence);

?? ? 1)文件第一個字節的偏移量為0

?? ? 2offset:指定一個以字節為單位的數值, off_t:有符號整形數

?? ? 3whence:表明應參照哪個基點來解釋offset參數。

? ? ? ? ? ? SEEK_SET: 將文件偏移量設置為從文件頭部起始點開始的offset個字節

? ? ? ? ? ? SEEK_CUR: 相對于當前文件偏移量,將文件偏移量調整offset個字節

? ? ? ? ? ? SEEK_END: 將文件偏移量設置為起始于文件尾部的offset個字節,也就是說,offset參數應該從文件最后一個字節之后的下一個字節算起

?? ? 4lseek()調用成功會返回新的文件偏移量。

?? ? 5lseek()并不適用于所有類型的文件。不允許將lseek()應用于管道、FIFOsocket或者終端,一旦如此,errno返回ESPIPE

  1. 通用I/O模型以外的操作:ioctl()

? ? ? #include<sys/ioctl.h>

? ? ? int ioctl(int fd, int request, …/*argp*/);

? ? ? (1) request: 指定了將在fd上執行的控制操作。具體設備的頭文件定義了可傳遞給request參數的常量。

? ? 2ioctl根據request的參數值來確定argp所期望的類型。通常情況下,argp是指向整數或結構的指針。有些情況,不需要使用argp

? ? 3ioctl5350上用于對于芯片的管腳進行I/O設置。常規使用場景是open-->ioctl-->close


本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/383369.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/383369.shtml
英文地址,請注明出處:http://en.pswp.cn/news/383369.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

快速排序概念及實現

快速排序 快速排序是Hoare于1962年提出的一種二叉樹結構的交換排序方法&#xff0c; 其基本思想為&#xff1a; 任取待排序元素序列中的某元素作為基準值&#xff0c;按照該排序碼將待排序集合分割成兩子序列&#xff0c;左子序列中所有元素均小于基準值&#xff0c;右子序列…

Linux編程手冊讀書筆記第五章(20140408)

改變已打開文件性質&#xff1a;fcntl&#xff08;&#xff09; #include<fcntl.h> int fcntl(int fd, int cmd, …); (1) 調用失敗返回&#xff0d;1 &#xff08;2&#xff09;fcntl函數有5種功能&#xff1a; a. 復制一個現有的描述符&#xff08;cmd&#xff1d;F_D…

歸并排序概念及其實現

基本思想&#xff1a; 歸并排序&#xff08;MERGE-SORT&#xff09;是建立在歸并操作上的一種有效的排序算法,該算法是采用分治法&#xff08;Divide and Conquer&#xff09;的一個非常典型的應用。將已有序的子序列合并&#xff0c;得到完全有序的序列&#xff1b;即先使每個…

##連接符和#符的使用

C語言中如何使用宏C&#xff08;和C&#xff09;中的宏&#xff08;Macro&#xff09;屬于編譯器預處理的范疇&#xff0c;屬于編譯期概念&#xff08;而非運行期概念&#xff09;。下面對常遇到的宏的使用問題做了簡單總結。 關于#和## 在C語言的宏中&#xff0c;#的功能是將其…

計數排序和基數排序

適用于數據集中在某個范圍中&#xff0c; //統計每個數據出現的次數 計數排序&#xff1a;鴿巢原理 1找范圍 2給空間 3記次數 4回收 for(int i 0;i<size; i) {temp[array[i]]; }for(int i0;i<range;i&#xff09;{while(temp[i])array[index]i;}代碼實現 時間復雜度&…

信號量sem_wait()的使用

閑來無事&#xff0c;我給大家講下UNIX/Linux下信號量函數的使用。首先你得知道什么叫信號量&#xff0c;什么時候要用信號量。這個嘛&#xff0c;主要就是用來保護共享資源的&#xff0c;也就是說如果你想限制某個&#xff08;些&#xff09;資源在同一時刻只能有一&#xff0…

C++起始(關鍵字,命名空間,缺省參數,函數重載(c語言為什么不支持函數重載))

1. C關鍵字(C98) 2. 命名空間 在C/C中&#xff0c;變量、函數和后面要學到的類都是大量存在的&#xff0c;這些變量、函數和類的名稱將都存在于全局作用 域中&#xff0c;可能會導致很多沖突。使用命名空間的目的是對標識符的名稱進行本地化&#xff0c;以避免命名沖突或名字污…

va_list和vsnprintf、getopt

原理解釋&#xff1a; VA_LIST 是在C語言中解決變參問題的一組宏&#xff0c;在<stdarg.h>頭文件下。 VA_LIST的用法&#xff1a; &#xff08;1&#xff09;首先在函數里定義一具VA_LIST型的變量&#xff0c;這個變量是指向參數的指針 &#xff08;2&a…

GitHub相關

git是一個版本控制工具. 主要解決三個問題 代碼被喵星人吃掉了.產品經理反復修改需求, 需要同時維護多個版本代碼.多人協同開發. 安裝 git for windows 這個是一個git的windows系統的命令行版本 https://git-scm.com/downloads 下載會很慢很慢 使用 Github 創建項目 注冊…

linux中bin與sbin目錄的作用及區別介紹

在linux系統中&#xff0c;有兩個重要的目錄&#xff1a;bin與sbin&#xff0c;分別包括/bin、/usr/bin/與/sbin、/usr/sbin/。 bin: bin為binary的簡寫&#xff0c;主要放置系統的必備執行文件&#xff0c;例如: cat、cp、chmod df、dmesg、gzip、kill、ls、mkdir、more、m…

c++起始(名詞修飾,extern “C” ,引用)

名字修飾(name Mangling) 在C/C中&#xff0c;一個程序要運行起來&#xff0c;需要經歷以下幾個階段&#xff1a;預處理、編譯、匯編、鏈接。 Name Mangling是一種在編譯過程中&#xff0c;將函數、變量的名稱重新改編的機制&#xff0c;簡單來說就是編譯器為了區分各 個函數…

Linux進程間通信方式--本地socket

先上一個代碼 服務端&#xff1a; [cpp] view plaincopy //s_unix.c #include <stdio.h> #include <sys/types.h> #include <sys/socket.h> #include <sys/un.h> #define UNIX_DOMAIN "/tmp/UNIX.domain" int main(void) { so…

extern和static的區別

c語言中的 static&#xff1a; 修飾局部變量&#xff1a;存放在靜態數據區&#xff0c;生命周期位整個程序結束&#xff0c;但作用于仍為函數局部。 修飾全局變量&#xff1a;無法被同一工程其他源文件訪問。 修飾函數&#xff1a;與全局變量類似。 extern&#xff1a; 可被…

RT5350原廠SDK及AP移植步驟詳解

最近想搞一下rt5350&#xff0c;所以找了個原廠的SDK包進行了編譯&#xff0c;很快路由器就可以用了&#xff0c;把我的編譯操作步驟寫了下分享給更多的愛好者&#xff0c;供大家參靠&#xff0c;下一步準備移植攝像頭玩玩。有興趣的可以一起交流。 RT5350移植Toolchain工具的安…

linux系統編程之進程概念(操作系統---管理,進程創建,進程狀態,進程優先級, 環境變量,程序地址空間,進程O(1)調度方法)

系統編程&#xff1a; 進程概念->進程控制->基礎IO->進程間通信->進程信號->多線程進程概念 馮諾依曼體系結構----現代計算機硬件體系結構 馮諾依曼體系結構----現代計算機硬件體系結構 計算機五大硬件單元&#xff1a;輸入設備&#xff1a;鍵盤輸出設備&#…

Make Menuconfig詳解 (配置內核選擇)

Make Menuconfig簡介 make menuconfig 圖形化的內核配置make mrproper -----刪除不必要的文件和目錄. #make config&#xff08;基于文本的最為傳統的配置界面&#xff0c;不推薦使用&#xff09; #make menuconfig&#xff08;基于文本選單的配置界面&#xff0c;字符終端下…

Linux系統編程之進程控制(進程創建,fork函數,進程中止,進程等待,程序替換)

進程創建 fork()------復制&#xff0c;返回值&#xff0c;寫時復制 vfork()創建子進程—子進程與父進程共用同一塊虛擬地址空間&#xff0c; 為了防止調用棧混亂&#xff0c;因此阻塞父進程直到子進程調用exit&#xff08;&#xff09;退出或者進行程序替換 vfork創建的子…

Linux內核配置系統淺析

隨著 Linux 操作系統的廣泛應用&#xff0c;特別是 Linux 在嵌入式領域的發展&#xff0c;越來越多的人開始投身到 Linux 內核級的開發中。面對日益龐大的 Linux 內核源代碼&#xff0c;開發者在完成自己的內核代碼后&#xff0c;都將面臨著同樣的問題&#xff0c;即如何將源代…

Linux系統編程下做一個簡易的shell

自主實現一個shell--------minshell shell&#xff1a;命令行解釋器-------解釋執行用戶的輸入&#xff08;完成相對應的功能&#xff09; 步驟 1. 獲取標準輸入中的字符串 2. 對字符串進行解析[ls -l -a][ls ] [-l ] [-a] 3. 創建子進程 4. 子進程中進行程序替換 5. 父進程…

C++起始(內聯函數,宏的優缺點,const關鍵字,auto關鍵字(C++11)基于范圍的for循環(C++11). 指針空值nullptr(C++11))

內聯函數 概念 以inline修飾的函數叫做內聯函數&#xff0c;編譯時C編譯器會在調用內聯函數的地方展開&#xff0c;沒有函數壓棧的開銷&#xff0c; 內聯函數提升程序運行的效率 函數前增加inline關鍵字將其改成內聯函數&#xff0c;在編譯期間編譯器會用函數體替換函數的調用…