歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Unix環境高級編程學習筆記

exec系函數

Posix標准制定的exec系列的函數主要有六個,它們的聲明新式如下:
  1. int execl(const char *path, const char *arg, ...);  
  2.        int execlp(const char *file, const char *arg, ...);  
  3.        int execle(const char *path, const char *arg,  
  4.                   ..., char * const envp[]);  
  5.        int execv(const char *path, char *const argv[]);  
  6.        int execvp(const char *file, char *const argv[]);  
  7.        int execvpe(const char *file, char *const argv[],  
  8.                   char *const envp[]);  
這些函數的作用是利用一個新的進程鏡像(process image)來替代當前的進程鏡像。 主要說明一下execlp函數,它的第一個參數file用於制定可執行的文件名,第二個參數arg以及後面的可變參都是傳遞給該可執行文件的參數,由於是可變參數,所以最後一個參數必須以(char*)NULL結尾。該函數如果成功執行,由於是替代當前的進程,所以函數調用語句之後的代碼就不會再被執行了。 這裡需要注意的是傳遞的參數,一般情況下,execlp函數的前兩個參數一樣,都是可執行文件名。我們考慮帶參數的main函數的執行情況,argv[0]指代的實際上是可執行文件名,其後的argv[1]~~argv[n]才是真正傳遞給它的參數。所以為了保持一致性,由於arg參數以及其後的可變參才是傳遞給執行程序的參數,所以,arg參數最好傳遞可執行文件的名字,就是是和file參數保持一致。

進程時間

linux下獲取的進程時間主要分為以下三類:時鐘時間(clock time),用戶CUP時間(user CPU time),系統CPU時間(system CPU time) 在說它們之間的區別,我們首先來回顧下進程的三種基本狀態:運行,就緒,阻塞。所謂時鐘時間其實就是進程從執行開始到結束真實經歷的時間,所以: 時鐘時間 = 阻塞時間 + 就緒時間 + 運行時間  而我們知道進程的執行分為管態和目態,前者是內核調用函數執行的狀態,後者則是用戶代碼執行時的狀態,所以:  用戶CPU時間 = 運行狀態下的用戶空間時間   系統CPU時間 = 運行狀態下系統空間的時間

Linux運行環境限制

unix中有以下三種限制:
(1)編譯時限制(頭文件)
(2)不與文件或目錄相關聯的運行時限制(sysconf函數)
(3)與文件或目錄相關聯的運行時限制(pathconf函數和fpahtconf函數
第一種是屬於編譯時限制,這類限制一般都作為宏定義在頭文件中,例如CHAR_MAX等,關鍵是後兩種限制,它們屬於運行時的環境限制,需要使用以下三種函數進行檢測:
  1. long sysconf(int name);  
  2. long pathconf(const char *pathname, int name);  
  3. long fpathname(int filedes, int name);  
它們是用來檢測linux運行環境的限制的,成功返回響應值,出錯則返回-1。 第一個函數是檢測不與文件或目錄相關聯的運行時限制,例如OPEN_MAX,它返回用戶可打開文件的最大數量。 而後兩個函數則是分別用於檢測與目錄或文件相關聯的運行時限制,例如LINK_MAX,它返回文件鏈接數的最大值。
Copyright © Linux教程網 All Rights Reserved