歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> Linux技術

《UNIX環境高級編程》(第三版第一章)

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 2
12.

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。

Copyright © Linux教程網 All Rights Reserved