?? unix系統開發-系統調用-進程間通信.txt
字號:
UNIX系統開發-系統調用-進程間通信
基本上所有的系統調用成功時返回0或正數,失敗時返回負值。
進程的用戶標志號管理
系統調用的格式
#include <unistd.h>
unsigned short getuid()
unsigned short getgid()
unsigned short geteuid()
unsigned short getegid()
int setuid(int uid)
int setgid(int gid)
int seteuid(int euid)
int setegid(int egid)
參數與功能說明:
前四個系統調用返回進程的實際用戶標志號,有效用戶標志號,實際用戶組標志號和有效組標志號。這些調用總能成功。setuid和setgid用于設置進程的實際用戶(組)標志號和有效用戶(組)標志號。如果調用進程的有效用戶標志號是超級用戶標志號,則將調用進程的實際用戶(組)標志號和有效用戶(組)標志號設為uid和gid;如果調用進程的有效用戶標志號不是超級用戶標志號,但他的實際用戶(組)標志號為uid(gid)時,則其有效用戶(組)標志號設為uid或gid。如果調用進程的有效用戶標志號不是超級用戶標志號,且他的實際用戶(組)標志號不為uid(gid)時,則調用失敗。Seteuid和setegid與setuid,setgid類似,只不過只對有效用戶(組)標志號起作用。
進程標志號管理
系統調用的格式
#include <sys/types.h>
#include <unistd.h>
int getpid()
int getpgrp()
int getppid()
int setpgrp()
int setsid()
參數與功能說明:
前三個系統調用分別返回進程的進程標志號,進程組標志號和其父進程標志號。他們總能成功返回。第四,五個調用設置進程組標志號,他將調用進程的進程組標志號改為調用進程的進程標志號,使其成為進程組首進程,并返回這一新的進程組標志號。
信號機構
signal系統調用的格式
#include <signal.h>
void (*signal(sig,func))()
int sig; /*信號值 */
void (*func)(); /*信號處理方式*/
參數與功能說明:
按函數func的定義設置調用進程對信號sig的處理方式。執行成功時,返回調用進程先前對信號sig處理方式的值,失敗時返回-1。參數func的取值為SIG_DFL,SIG_IGN或用戶信號處理函數地址,分別表示缺省方式,或略方式和捕獲方式。
sig的取值有(重要的列出)
SIGHUP 掛起。當終端掛起時,該信號發送到和該終端相關的所有進程。當進程組中的首進程因某種原因中斷時,也向該組的每個進程發送該信號
SIGINT 中斷。當敲擊中斷鍵時該信號發送到和該終端相關的所有進程
SIGQUIT 退出。當敲擊(ctrl+\)鍵時該信號發送到和該終端相關的所有進程
SIGKILL 殺死。殺死進程的信號,他不能被ignore
SIGSEGV 段違例
SIGPIPE 寫管道錯。當進程向一個沒有任何讀進程的管道寫數據時,發送該信號
SIGALRM 報警時鐘。
SIGTERM 軟件終止信號
SIGUSR1 自定義信號
SIGUSR2 自定義信號
SIGCLD 子進程消亡。當子進程因某種原因而消亡時,它向父進程發送該信號。
SIGURG 緊急的套接口條件
SIGPOLL 在一條流上發生了用戶指定的事件時,流控制機制發送該信號到用戶進程
pause系統調用的格式
int pause()
參數與功能說明:
使調用進程睡眠直到其接收到一信號為止。該調用的結果依賴進程對接收到的信號的處理方式。
卻省方式時,終止調用進程,pause無返回值
或略方式時,調用進程繼續睡眠
捕獲方式時,調用進程從信號處理函數返回后,繼續往下執行,此時其調用的返回值為-1,errno為EINTR
kill系統調用的格式
int kill(pid,sig)
int pid,sig;
參數與功能說明:
把一個信號值為sig的信號發送給進程標志號為pid的相關進程。該調用執行成功與否,依賴于調用進程的有效用戶標志號和參數pid的值。
Pid>0:將信號發給進程號等于pid的進程
Pid=0:將信號發給調用進程的同組進程
Pid=-1:將信號發給實際用戶號等于調用進程的有效用戶標志號的所有進程
非-1的負數:將信號發給進程組標志號為pid絕對值的所有進程
系統調用的格式
#include <signal.h>
void (*sigset(sig,func))()
int sig;
void (* func)();
int sighold(int sig)
int sigrelse(int sig)
int sigignore(int sig)
int sigpause(int sig)
參數與功能說明:
sigset與signal功能基本相同,不同的是sigset 解決了signal系統調用需要重復設置信號捕獲函數的問題。
sighold和sigrelse用來建立代碼臨界區,sigrelse恢復先前由sigset設置的信號方式。
sigignore設置調用進程對信號sig的方式為SIG_IGN,相當與signal(sig,SIG_IGN);
sigpause使調用進程睡眠,直到他接收到一信號為止,類似于pause
跟蹤機構
ptrace系統調用的格式
#include <unistd.h>
int ptrace(request,pid,addr,data)
int request,pid,addr,data;
參數與功能說明:
該調用按參數request所提出的請求完成各種操作,參數pid代表需跟蹤的進程號,參數addr是子進程地址空間的某一地址,參數data是在addr地址位置上需寫入的數值。
管道文件操作
pipe系統調用的格式
#include <unistd.h>
int pipe(pfd)
int pfd[2]
參數與功能說明:
該調用為調用進程創建一個pipe文件,分配兩個文件描述符來標志該pipe文件,這兩個文件描述符分別放在pfd[0],pfd[1]中,進程用pfd[0]從pipe文件中讀數據,而用pfd[1]往pipe文件中寫數據。調用成功返回0,失敗時返回-1。
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -