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。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论