poll fstat stat mmap sendto recvmsg recv
getcwd
*************** poll函式起源於svr3,最初侷限於流裝置。svr4取消了這種限制,允許poll工作在任何描述字上。poll提供的功能與select類似,不過在處理流裝置時,它能夠提供額外的資訊。
#include
int poll(struct pollfd *fdarray, unsigned long nfds, int timeout);
返回:就緒描述字的個數,0-超時,-1-出錯
第乙個引數是指向乙個結構陣列第乙個元素的指標。每個陣列元素都是乙個pollfd結構,用於指定測試某個給定描述字fd的條件。
第二個引數nfds是用來指定陣列fdarray的長度。
最後乙個引數timeout是指定poll函式返回前等待多長時間。它的取值如下:
timeout值 說明
inftim 永遠等待
0 立即返回,不阻塞程序
>0 等待指定數目的毫秒數
***************== stat fstat lstat
int stat(const char *restrict pathname, struct stat *restrict buf);
提供檔案名字,獲取檔案對應屬性。感覺一般是檔案沒有開啟的時候這樣操作。
int fstat(int filedes, struct stat *buf);
通過檔案描述符獲取檔案對應的屬性。檔案開啟後這樣操作
int lstat(const char *restrict pathname, struct stat *restrict buf);
連線檔案
三個函式的返回:若成功則為0,若出錯則為-1
給定乙個pathname,stat函式返回乙個與此命名檔案有關的資訊結構,fstat函式獲得已在描述符filedes上開啟的檔案的有關資訊。lstat函式類似於stat,但是當命名的檔案是乙個符號連線時,lstat返回該符號連線的有關資訊,而不是由該符號連線引用的檔案的資訊。
第二個引數是個指標,它指向乙個我們應提供的結構。這些函式填寫由buf指向的結構。
********************==== mmap
linux提供了記憶體對映函式mmap, 它把檔案內容對映到一段記憶體上(準確說是虛擬記憶體上), 通過對這段記憶體的讀取和修改, 實現對檔案的讀取和修改, 先來看一下mmap的函式宣告:
mmap系統呼叫並不是完全為了用於共享記憶體而設計的。它本身提供了不同於一般對普通檔案的訪問方式,程序可以像讀寫記憶體一樣對普通檔案的操作。而posix或系統v的共享記憶體ipc則純粹用於共享目的,當然mmap()實現共享記憶體也是其主要應用之一。
mmap系統呼叫使得程序之間通過對映同乙個普通檔案實現共享記憶體。普通檔案被對映到程序位址空間後,程序可以像訪問普通記憶體一樣對檔案進行訪問,不必再呼叫read(),write()等操作。
記憶體對映的步驟:
用open系統呼叫開啟檔案, 並返回描述符fd.
用mmap建立記憶體對映, 並返回對映首位址指標start.
對對映(檔案)進行各種操作, 顯示(printf), 修改(sprintf).
用munmap(void *start, size_t lenght)關閉記憶體對映.
用close系統呼叫關閉檔案fd.
***************==== getcwd 取當前工作目錄
***************=== recv/recvfrom/recvmsg系統呼叫
功能描述:
從套接字上接收乙個訊息。對於recvfrom 和 recvmsg,可同時應用於面向連線的和無連線的套接字。recv一般只用在面向連線的套接字,幾乎等同於recvfrom,只要將recvfrom的第五個引數設定null。
如果訊息太大,無法完整存放在所提供的緩衝區,根據不同的套接字,多餘的位元組會丟棄。
假如套接字上沒有訊息可以讀取,除了套接字已被設定為非阻塞模式,否則接收呼叫會等待訊息的到來。
返回說明:
成功執行時,返回接收到的位元組數。另一端已關閉則返回0。失敗返回-1,errno被設為以下的某個值
eagain:套接字已標記為非阻塞,而接收操作被阻塞或者接收超時
ebadf:sock不是有效的描述詞
econnrefuse:遠端主機阻絕網路連線
efault:記憶體空間訪問出錯
eintr:操作被訊號中斷
einval:引數無效
enomem:記憶體不足
enotconn:與面向連線關聯的套接字尚未被連線上
enotsock:sock索引的不是套接字
運維命令系統之 strace
strace是什麼?按照strace官網的描述,strace是乙個可用於診斷 除錯和教學的linux使用者空間 我們用它來監控使用者空間程序和核心的互動,比如系統呼叫 訊號傳遞 程序狀態變更等。linux核心目前有300多個系統呼叫,詳細的列表可以通過syscalls手冊頁檢視。這些系統呼叫主要分為...
用strace工具跟蹤系統呼叫
linux下可以用strace工具檢視應用程式的系統呼叫。strace h 檢視能呼叫的引數 1.strace o xwatv.log xwatv o xwatv.log 是指定將跟蹤資訊存放在xwatv.log中,xwatv是指要跟蹤的命令或應用程式 2.把生成的log檔案拷貝回windows下進...
strace 跟蹤程序中的系統呼叫
strace常用來跟蹤程序執行時的系統呼叫和所接收的訊號。在linux世界,程序不能直接訪問硬體裝置,當程序需要訪問硬體裝置 比如讀取磁碟檔案,接收網路資料等等 時,必須由使用者態模式切換至核心態模式,通過系統呼叫訪問硬體裝置。strace可以跟蹤到乙個程序產生的系統呼叫,包括引數,返回值,執行消耗...