原创 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