一、read系統調用一旦有了與一個打開文件描述相關連的文件描述符,只要該文件是用O_RDONLY或O_RDWR標志打開的,就可以用read()系統調用從該文件中讀取字節函數原型:ssize_t read(int fd, void *bu
一、目錄的訪問功能說明:打開一個目錄原型:DIR* opendir(char *pathname);返回值:打開成功,返回一個目錄指針打開失敗,則返回NULL功能說明:訪問指定目錄中下一個連接的細節原型:struct &nb
一、讀取文件元數據int stat(const char *path, struct stat *buf);int fstat(int fd, struct stat *buf);int lstat(const char *path,
一、打開文件內核數據結構1、一個進程打開兩個文件文件狀態標志:讀、寫、追加、同步、非阻塞等2、一個進程兩次打開同一文件 3、兩個進程打開同一文件示例程序:/***************************
一、fcntl函數功能:操縱文件描述符,改變已打開的文件的屬性int fcntl(int fd, int cmd, ... /* arg */ );cmd的取值可以如下:復制文件描述符F_DUPFD (long)設置/獲取文件描述符標志
一、什麼是進程從用戶的角度來看進程是程序的一次執行過程。從操作系統的核心來看,進程是操作系統分配的內存、CPU時間片等資源的基本單位。進程是資源分配的最小單位。每一個進程都有自己獨立的地址空間與執行狀態。像UNIX這樣的多任務操作系統能
fork的作用是根據一個現有的進程復制出一個新進程,原來的進程稱為父進程(Parent Process),新進程稱為子進程(Child Process)。系統中同時運行著很多進程,這些進程都是從最初只有一個進程開始一個一個復制出來的。在
一、exec替換進程映象在進程的創建上Unix采用了一個獨特的方法,它將進程創建與加載一個新進程映象分離。這樣的好處是有更多的余地對兩種操作進行管理。當我們創建了一個進程之後,通常將子進程替換成新的進程映象,這可以用exec系列的函數來
一、僵屍進程當子進程退出的時候,內核會向父進程發送SIGCHLD信號,子進程的退出是個異步事件(子進程可以在父進程運行的任何時刻終止)子進程退出時,內核將子進程置為僵屍狀態,這個進程稱為僵屍進程,它只保留最小的一些內核數據結構,以便父進
一、終端的概念在UNIX系統中,用戶通過終端登錄系統後得到一個Shell進程,這個終端成為Shell進程的控制終端(Controlling Terminal),控制終端是保存在PCB中的信息,而我們知道fork會復制PCB中的信息,因此
一、為了理解信號,先從我們最熟悉的場景說起:1. 用戶輸入命令,在Shell下啟動一個前台進程。2. 用戶按下Ctrl-C,這個鍵盤輸入產生一個硬件中斷。3. 如果CPU當前正在執行這個進程的代碼,則該進程的用戶空間代碼暫停執行,CPU
一、kill, raise, killpg 函數int kill(pid_t pid, int sig);int raise(int sig);int killpg(int pgrp, int sig);kill命令是調用kill函數實
一、信號在內核中的表示實際執行信號的處理動作稱為信號遞達(Delivery),信號從產生到遞達之間的狀態,稱為信號未決(Pending)。進程可以選擇阻塞(Block)某個信號。被阻塞的信號產生時將保持在未決狀態,直到進程解除對此信號的
一、內核如何實現信號的捕捉如果信號的處理動作是用戶自定義函數,在信號遞達時就調用這個函數,這稱為捕捉信號。由於信號處理函數的代碼是在用戶空間的,處理過程比較復雜,舉例如下:1. 用戶程序注冊了SIGQUIT信號的處理函數sighandl
一、sigqueue函數功能:新的發送信號系統調用,主要是針對實時信號提出的支持信號帶有參數,與函數sigaction()配合使用。原型:int sigqueue(pid_t pid, int sig, const union sigv
一、利用pause和alarm函數實現sleep函數int pause(void);pause函數使調用進程掛起直到有信號遞達。如果信號的處理動作是終止進程,則進程終止,pause函數沒有機會返回;如果信號的處理動作是忽略,則進程繼續處
一、進程間通信每個進程各自有不同的用戶地址空間,任何一個進程的全局變量在另一個進程中都看不到,所以進程之間要交換數據必須通過內核,在內核中開辟一塊緩沖區,進程1把數據從用戶空間拷到內核緩沖區,進程2再從內核緩沖區把數據讀走,內核提供的這
一、當沒有數據可讀時O_NONBLOCK disable:read調用阻塞,即進程暫停執行,一直等到有數據來到為止。O_NONBLOCK enable:read調用返回-1,errno值為EAGAIN。示例程序如下:/*********
進程間通信必須通過內核提供的通道,而且必須有一種辦法在進程中標識內核提供的某個通道,前面講過的匿名管道是用打開的文件描述符來標識的。如果要互相通信的幾個進程沒有從公共祖先那裡繼承文件描述符,它們怎麼通信呢?內核提供一條通道不成問題,問題