1.
/etc/passwd
/etc/shadow
/etc/group
/etc/gshadow
2.
//當文件是一個符號鏈接時,stat返回的是該符號鏈接引用的文件的信息,而lstat返回的是該符號鏈接的有關信息。 int stat(const char *restrict pathname,struct stat *restrict buf); int lstat(const char *restrict pathname,struct stat *restrict buf); int fstat(int fd,struct stat *buf);3.
$touch f1 $ln f1 f2 硬鏈接,相同inode。 $ln -s f1 f3 軟連接,不同inode。4.
在最高層次的根目錄中,..(父目錄)和.(當前目錄)相同。 $ls -ldi /. /.. -l 以長格式的形式查看當前目錄下所有可見文件的詳細信息。 -d 僅打印目錄信息,而不是打印目錄中所有文件的信息。 -i 打印文件或目錄的i節點編號。5.
#include <dirent.h> //directory entries(entry)目錄項。 DIR *opendir(const char *pathname); //一定要是目錄。 struct dirent *readdir(DIR *dp); int closedir(DIR *dp);6.
$rmdir 目錄 目錄非空刪不了。 $rm -rf 目錄 -r 向下遞歸,不管有多少級目錄,一並刪除。 -f 直接強行刪除,不做任何提示。7.
int printf(const char *format,...); int fprintf(FILE *stream,const char *format,...); int sprintf(char *str,const char *format,...); int snprintf(char *str,size_t size,const char *format,...); int vprintf(const char *format,va_list ap); int vfprintf(FILE *stream,const char *format,va_list ap); int vsprintf(char *str,const char *format,va_list ap); int vsnprintf(char *str,size_t size,const char *format,va_list ap); //v可變,n大小。8.
__attribute__((noreturn)) //若你需要用一個沒有返回值的函數A提前終止一個有返回值的函數B。這樣可以避免警告:提示B沒有返回值。 $cat test1.c extern void exitnow(); int foo(int n) { if(n>0) { exitnow(); /* control never reaches this point */ } else return 0; } $gcc -c -Wall test1.c test1.c: In function `foo': test1.c:8: warning: this function may return with or without a value $cat test2.c extern void exitnow() __attribute__((noreturn)); int foo(int n) { if(n>0) exitnow(); else return 0; } $gcc -c -Wall test2.c no warnings!9.
int chdir(const char *path); //改變工作目錄。10.
重定向 > <
11.
#define STDIN_FILENO 0 #define STDOUT_FILENO 1 #define STDERR_FILENO 212.
pid_t getpid(); //標准保證它能保存在一個長整型中。(long)getpid()13.
pid_t fork(void); //調用一次,返回兩次 pid_t waitpid(pid_t pid,int *statloc,int options); int execlp(const char *filename,const char *arg0,.../*(char *)0*/); //若出錯,返回-1;若成功,不返回。14.
thread線程:一個進程內的所有進程共享同一地址空間、文件描述符、棧以及與進程相關的屬性。因為它們能訪問同一存儲區,所以各線程在訪問共享數據時需要采取同步措施以避免不一致性(信號量)。
15.
/*errno可以是一個包含出錯編號的整數,也可以是一個返回出錯編號指針的函數。在支持多線程的環境中,多個線程共享進程地址空間,每個線程都有屬於它自己的局部errno以避免一個線程干擾另一個線程。*/ extern int errno; extern int *__errno_location(void); #define errno (*__errno_location()) /*解釋:errno實際上並不是我們通常認為的是個整型數值,而是通過整型指針來獲取的。這個整型就是線程安全的。另外,宏之所以這樣實現,是因為標准庫規定了必須能夠通過&errno方式取得保存錯誤代碼的變量的地址,因此__errno_location()函數的返回值是指針,並把宏定義為解引用函數返回的地址*__errno_location()。如果__errno_location直接返回int類型,此時就無法取得保存錯誤代碼的變量的地址。*/ //對於errno應當注意兩條規則: //a.如果沒有出錯,其值不會被例程清除。因此,僅當函數的返回值指明出錯時,才檢驗其值。 //b.任何函數都不會將errno值設置為0,而且在<errno.h>中定義的所有常量都不為0。16.
char *strerror(int errnum); void perror(const char *msg);17.
uid_t getuid(void); gid_t getgid(void);18.
中斷鍵:Delete鍵或Ctrl+C(SIGINT信號)
退出鍵:Ctrl+\(SIGQUIT信號)
19.
void (*signal(int signo,void (*func)(int)))(int); //r若成功,返回以前的信號處理配置;若出錯,返回SIG_ERR。 #define SIG_ERR (void (*)()) -1 #define SIG_DFL (void (*)()) 0 //default #define SIG_IGN (void (*)()) 1 //忽略信號20.
日歷時間:自1970年1月1日00:00:00以來所經過的秒數累計值(time_t)。
進程時間:以時鐘的滴答計算(clock_t)。每秒時鐘滴答數:sysconf(_SC_CLK_TCK);
時鐘時間
用戶CPU時間
系統CPU時間
21.
/dev/null,或稱空設備,是一個特殊的設備文件,它丟棄一切寫入其中的數據(但報告寫入操作成功),讀取它則會立即得到一個EOF。