UNIX環境高級編程學習之第十章信號-用信號和非局部轉移函數寫非阻塞的IO函數
/* File: NonblockingIO.c Desc: 用信號和非局部轉移函數寫非阻塞的IO函數 */ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <errno.h> #include <signal.h> #include <sys/types.h> #include <unistd.h> #include <setjmp.h> #define MAXBUFSIZE 1024 #define READ_ERROR -1 #define READ_TIMEOUT -2 static sigjmp_buf jmpbuf; /* 處理計時器超時信號 */ static void sig_alrm(int signo) { siglongjmp(jmpbuf, 1); // 信號處理中專用的非局部轉移函數, 功能: 轉移到sigsetjmp()位置 } int my_read(char* buf, const int len, const int time) { signal(SIGALRM, sig_alrm); int ret, readLen; ret = sigsetjmp(jmpbuf, 1); // 信號處理中專用的非局部轉移函數, 功能: 設置轉換點 if (ret == 0) { alarm(time); // 設置計時器 if (( readLen = read(STDIN_FILENO, buf, len)) < 0) // 阻塞的IO { alarm(0); // 清楚計時器 return READ_ERROR; } alarm(0); return readLen; } return READ_TIMEOUT; } int main(int argc, char* argv[]) { char buf[MAXBUFSIZE]; int ret; while (1) { memset(buf, 0x00, sizeof(buf)); ret = my_read(buf, sizeof(buf), 5); if (ret == READ_ERROR) { printf("my_read Error ! /n"); exit(-1); }else if (ret == READ_TIMEOUT) { printf("my_read Timeout!/n"); }else{ printf("my_read data:%s", buf); } } return 0; }
UNIX環境高級編程學習之第十一章線程-線程的創建、退出、等待、取消、分離 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #i
UNIX環境高級編程學習之第五章標準IO-實現查看所有用戶 #include <string.h> #include <stdio.h> #include <stdlib.h> #include <unistd.h> int main(i
UNIX環境高級編程學習之第六章系統數據文件和信息-修改第四章實現的Shell的“ls -l”功能, 加入顯示文件的用戶名和組名 // 只能查看目錄中的所有文件屬性 #include <stdio.h> #include <stdlib.
UNIX環境高級編程學習之第十章信號-信號集的操作,讓進程阻塞SIGQUIT信號 /* File: sigprocmask.c Desc: 信號集的操作,讓進程阻塞SIGQUIT信號 */ #include <stdio.h> #in
UNIX環境高級編程學習之第八章進程控制-用父子進程實現打開kate,返回kate關閉狀態 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unis
UNIX環境高級編程學習之第三章文件IO-文件讀操作 #include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include
UNIX環境高級編程學習之第十章信號-信號的基本操作(綁定/忽略/默認/發送) /* File: signal.c Desc: 信號基本操作 */ #include <stdio.h> #include <stdlib.h> #inc
到現在,我Unix,數據庫的掃盲基本完成了,就差網絡這一塊了。從今天開始網絡掃盲。上週五開始看HTTPD的實現,我們的httpd是AA(AA是我們SBE的元老之一)開發的,只要是AA開發的東西,學習一遍都很有收穫。因爲AA是一位非常優秀的