Linux应用编程_第1页
Linux应用编程_第2页
Linux应用编程_第3页
Linux应用编程_第4页
Linux应用编程_第5页
已阅读5页,还剩142页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 wait() 系统调用系统调用:父进程等待子进程撤销父进程等待子进程撤销若子进程尚未撤销若子进程尚未撤销,父进程睡眠等待父进程睡眠等待,子进程撤销时子进程撤销时,将其唤醒将其唤醒;若子进程已撤销若子进程已撤销,父进程不睡眠等待。父进程不睡眠等待。main()int i;if (fork() /*父进程父进程*/i=wait();printf(It is parent process.n);printf(The child process,ID number %d, is finished.n,i);else /*子进程子进程*/printf(It is child process.n);Sl

2、eep(n)系统调用系统调用 :进程睡眠等待:进程睡眠等待 n 秒。秒。 Exit () 系统调用:调用者进程终止;若父进程因系统调用:调用者进程终止;若父进程因wait()而睡眠,则而睡眠,则 唤醒父进程。唤醒父进程。main()int i;if (fork() /*父进程父进程*/sleep(10);printf(It is parent process.n);i=wait();printf(The child process,ID number %d, is finished.n,i);else /*子进程子进程*/printf(It is child process.n);exit()

3、;Exec( 参数参数)系统调用:执行一个文件的调用;系统调用:执行一个文件的调用;放弃原来执行的程序和数据区,放弃原来执行的程序和数据区, 以调用进程提供的参数转去执以调用进程提供的参数转去执行这个新的程序行这个新的程序(进程的身份不变)。进程的身份不变)。例:简化的例:简化的shell程序:程序:#incluse main()char command32; char * prompt = “$”; while (printf(“%s”,prompt),gets(command) != NULL)if(fork() = 0)execlp(command,(char *) 0); elseif

4、 (前台执行)前台执行)wait();进程通信进程通信 管道管道 (pipe系统调用)系统调用)pipe(fd): 创建一个管道,创建一个管道,fd0为管道的读端;为管道的读端;fd1为管道的写端。为管道的写端。管道可用来实现父进程与其子孙进程之间的通信。管道以管道可用来实现父进程与其子孙进程之间的通信。管道以FIFO方方式传送消息。式传送消息。 例:例:#include stdio.hmain()int x,fd2;char buf30,s30;pipe(fd); /*创建管道创建管道*/while(x=fork() = = -1); /*创建子进程失败时,循环创建子进程失败时,循环*/if

5、(x = = 0) sprintf(buf,“This is an examplen”);write(fd1,buf,30); /*把把buf中的字符写入管道中的字符写入管道*/exit(0); wait();read(fd0,s,30); /*父进程读管道中的字符父进程读管道中的字符*/printf(“%s”,s);/*创建子进程的实验。子进程修改了公共变量创建子进程的实验。子进程修改了公共变量globa和私有变量和私有变量vari。*/#include#include#includeint globa=4;int main() pid_t pid;int vari=5;printf(bef

6、ore fork.n);if (pid=fork()0)printf(fork error.n); exit(0);else if(pid=0) globa+;vari-;printf(Child changed the vari and globa.n); else printf(Parent did not changed the vari and globa.n);printf(globa=%d, vari=%dn,globa,vari);exit(0);软中断通信:(软中断通信:(UNIX中的用于同一用户间的低级通信中的用于同一用户间的低级通信)。目的是通知接收进程发生了异步事件。)目

7、的是通知接收进程发生了异步事件。)UNIX SYSTEM V 中定义了中定义了19个软中断信号;个软中断信号;LINUX中定义了中定义了31个软中断信号个软中断信号(在在signal.h中定义中定义)kill(pid,signal): 向进程向进程pid发送信号发送信号signal,若,若pid进程在可中断的优进程在可中断的优先级(低优先级)上睡眠,则将其唤醒。先级(低优先级)上睡眠,则将其唤醒。signal(sig,ps): 设置设置sig号软中断信号的处理方式;号软中断信号的处理方式;三种处理方式:三种处理方式:SIG_DFL:系统默认方式,一般是终止进程;:系统默认方式,一般是终止进程;

8、 SIG_IGN:忽略(屏蔽);:忽略(屏蔽); func(): 用制定义函数用制定义函数func()处理。处理。 Signal设置的处理方式,仅一次有效,处理后即回到默认方式。设置的处理方式,仅一次有效,处理后即回到默认方式。 9(SIGKILL)号软中断不允许设置。号软中断不允许设置。getpid()系统调用:返回本进程的进程号。系统调用:返回本进程的进程号。getppid()系统调用:返回父进程的进程号。系统调用:返回父进程的进程号。include func()printf(“A signal has been processedn”);main()int i;signal(SIGUSR1,func);if (fork() /*父进程父进程*/sleep(10);printf(It is parent process.n);i=wait();pri

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论