原创 8_25 設置用戶id或組id的程序絕對不能再調用system函數。安全漏洞
vim 8_24.c #include "apue.h" int main(int argc, char *argv[]) { int status; if(argc < 2)
原创 10_8 有問題的sleep函數
sleep2函數調用龍jmp使得另外一個信號處理函數sig_int提早終止。 一、源代碼: cat -n 10_8.c 10_9.c 1 #include <setjmp.h> 2 #include <signal
原创 alarm的一種用法。
alarm函數可以用於防止讀阻塞。 但如果系統調用是自動重啓動的,當從SIGALRM信號處理程序返回時,read並不被中斷。在這種情形下,設置時間限制不起作用。 一、源代碼: cat -n 10_10.c 1 #include
原创 8_21_awkexample
執行時一定要加上-f 或者在開頭加上 #! /bin/awk -f 要不回出錯。 BEGIN { for ( i = 0; i < ARGC; i++) printf "ARGV[%d
原创 8_30調整nice的值 nice值越高 調用優先級越低。
注意:只有當return 值爲-1 並且errno != 0 時 nice調整纔出錯。 cat -n 8_30.c 1 #include "apue.h" 2 #include <errno.h> 3
原创 10_14.c打印signal mask 的函數。
其實現方式很簡單,就是用sigismember函數與每個信號進行比較。 一、源代碼: :cat -n 10_14.c 1 #include "apue.h" 2 #include <errno.h> 3
原创 10_15.c先阻塞SIGQUIT信號,再釋放。
當在阻塞階段產生多個SIGQUIT信號時,當釋放阻塞後也只catch到一個SIGQUIT信號。 還原信號阻塞時最好用SIG_SETMASK。 一、源代碼: vim 10_15.c 1 #include "apue.h" 2 3
原创 Print argv and environ with fork .
The comdination of 8_17 and 8_16 The source code of 8_17.c cat -n 8_17.c 1 #include "apue.h" 2 3 int m
原创 UNIX環境高級編程學習筆記:9_12 孤兒進程 孤兒進程組
爲什麼父進程死後 子進程沒有被init(pid =1)領養 卻是被別的進程領養。 ./orphan name:parent pid = 10174, ppid = 19970, pgrp = 10174, tpgrp = 10174 na
原创 8_17echoall
:vim 8_17.c #include "apue.h" int main(int argc, char * argv[]) {
原创 10_18 用sigaction實現signal函數
除非設置了SA_RESTART標誌,否則sigaction函數不再重啓動被中斷的系統調用。 一、源代碼: vim 10_18.c #include "apue.h" Sigfunc * singnal(int signo,Sigfunc
原创 8_20 文件解釋器
1. 內核調用exec函數的進程實際執行的並不是該解釋器文件,而是解釋器文件中第一行指定的文件。 2. 參數依次是 argv[0] 解釋器的第一行文件名,argv[1] 解釋器裏可選參數,argv[2] 解釋器文件 和execl第2個第3
原创 10_5 在信號處理函數中調用非可重入函數getpwnam。
因爲main函數和信號處理函數中都調用getpwnam函數,而在getpwnam函數中會調用malloc和free,如果主函數malloc之後收到SIGALRM信號進入信號處理函數,在信號處理函數裏malloc然後free,而在信號處理函
原创 10_11alarm函數的作用修復系統自己重啓。
使用這種方法無需擔心,一個慢速的系統調用是否被中斷。 一、源代碼: 1 #include "apue.h" 2 #include <setjmp.h> 3 4 static void sig_alar
原创 8—31對每個命令進行計時,打印從tms中提取的值
一:注意頭文件爲<sys/times.h>,time後面有s。 源代碼: cat -n 8_31.c 1 #include "apue.h" 2 #include <sys/times.h> 3