APUE UNIX高階環境程式設計

2021-06-19 11:48:36 字數 1242 閱讀 9256

1.重寫ls指令,用到了dirent.h標頭檔案,乙個目錄有關的標頭檔案,可以用man檢視

有2個結構體dir與struct dirent,目錄結構體與當前目錄下檔案/目錄結構體

**如下

#include

#include

typedef struct dirent dirct;

intmain(int argc,char *argv)

for(i=1;id_name);

}close(pdir);

}return 0;

}2,輸入輸出初探

stdio.h中有一系列的io操作函式。getc(),putc(),fgets(),fputs(),fscanf,fprintf等檔案操作函式。scanf,printf,getchar,putchar,gets,puts等輸入輸出流控制,其本質是前者輸入輸出檔案為stdin或stdout(定義在stdio.h內),其中getc是巨集實現。

類似於linux中的io操作函式read,write,open,lseek,close。其中若要讀取輸入輸出用stdout_fileno,stdin_fileno。

3.程序的控制有三種fork,exec(6種),waitpid。獲取程式id為getpid

4.出錯處理。error.h

函式出錯返回errno變數。int型數字,利用strerror轉換為字串(返回指標),再利用perror將字串與errorno的值輸出到標準錯誤流上,格式為《字串: (errorno轉化的相應錯誤資訊。》

如errorno=eacces;perror();printf("%s",strerror);

可以利用perror將上乙個函式產生的錯誤打出。如

p=open("***","w");if(p == null) perror("file");

5.獲取使用者id組id getuid() getgid()。

6.系統呼叫與庫函式

系統呼叫是unix提供的訪問核心的介面,標準庫函式或非標準庫函式一般是呼叫的系統呼叫來實現,當然也可以不呼叫系統呼叫。

比如時間。系統呼叫只提供乙個返回距離2023年的秒,至於庫函式如何呼叫他將其變為我們容易識別的顯示,則由使用者態來處理,核心態只返回此數值。

乙個應用程序可以呼叫庫函式,或者系統呼叫,而庫函式則多會呼叫系統呼叫。

差別:系統呼叫一般提供的是核心的最小化介面,如sbrk,而庫函式一般比較複雜的功能如malloc。

一般程序系統呼叫直接被應用程式直接使用。如fork exec wait。

APUE(Unix 環境高階程式設計) 守護程序

今天補了一下apue的13章,守護程序部分。這裡簡單記錄一下,當個筆記吧。我的理解 守護程序就是後台程序,沒有控制終端,所以無法與使用者進行互動,就只是在後台默默執行。使用umask將檔案模式建立遮蔽字設定為乙個已知值。因為守護程序是乙個子程序,他會繼承父程序的檔案模式建立遮蔽字,所以本身它是乙個不...

unix環境高階程式設計

unix 日曆時間 自1970 年1 月1 日00 00 00 以來的國際標準時間 utc 程序時間 cpu 時間 時鐘時間 程序執行時間的總量。使用者cpu 時間 執行使用者指令時間量。系統cpu 時間 執行核心所經歷時間。命令 time 第三章至第七章 原子操作 任何乙個要求多於1 個函式呼叫的...

unix環境高階程式設計

檔案描述符file descriptor通常是乙個小的非負整數,核心用以標識乙個特定程序正在訪問的檔案。當核心開啟乙個現有檔案或建立乙個新檔案時,它都返回乙個檔案描述符。在讀寫檔案時,可以私用這個檔案描述符。按管理,每當執行乙個新程式時,所有的shell都為其開啟了3個標準檔案描述符 標準輸入,標準...