- 1、本文档共3页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
嵌入式linux应用开发.doc
进程控制开发
1 基本概念
Linux中最主要的进程表示有进程号(PID)和它的父进程号(PPID),均是非零的正整数。
Linux中获得当前进程的PID和PPID的系统调用函数为getpid和getppid。使用时包含unistd.h。
2 进程结构
Linux的进程包含3个段,分为“数据段”、“代码段”和“堆栈段”。
数据段:存放全局变量、常数以及动态数据分配的数据空间(malloc)。
代码段:程序代码的数据。
堆栈段:子程序的返回地址、子程序的参数及程序的局部变量。
Linux进程控制编程
进程创建:pid_t fork(void)
执行一次却返回两个值。fork用于从已存在进程中创建一个新进程。新进程为子进程,原进程为父进程。分别带回各自的返回值,父进程的返回值是子进程的进程号,子进程返回0。
使用时需包含#includesys/types.h//提供类型pid_t的定义。
exec函数:int execl(const char *path,const char *arg,…) …
exec函数实现在进程中启动另一个程序执行的方法。取代原调用进程的数据段、代码段和堆栈段,执行完之后,原调用进程的内容除了进程号外,其他全部被新的进程替换了。
使用时需包含#includeunistd.h。
终止进程:exit和_exit
_exit直接退出;exit处理之后退出,能保证数据的完整性。
exit:使用时需包含#includestdlib.h。
_exit:使用时需包含#includeunistd.h。
阻塞父进程,wait和waitpid:pid_t wait(int *status)
pid_t waitpid(pid_t pid,int *status, int options)
使用时需包含#includetypes.h,#includesys/wait.h。
3 Linux守护进程
守护进程是linux中的后台服务进程。在系统引导转入时启动,在系统关闭时终止。
创建简单的守护进程:
创建子进程,父进程退出
pid=fork();
If(pid0){exit(0)};
在子进程中创建新会话:pid_t setsid(void)
需包含#includesys/types.h,#includeunistd.h。
成功,该进程组id,错误 -1。
改变当前目录为根目录:chdir(“/”)
重设文件权限掩码:umask(0)
关闭文件描述符:close(i)(i=0~MAXFILE 65535)
进程间通信
基本概念
现在在linux中使用较多的进程间通信方式有以下几种:
管道和有名管道。
信号:是在软件层次上对中断机制的一种模拟。
消息队列。
共享内存。
信号量。
管道通信
无名管道
特点:(1)只能用于具有亲缘关系的进程之间的通信(父子,兄弟进程)。
(2)半双工。
(3)可看出特殊文件,用read,write操作。
管道创建与关闭
管道创建:int pipe(int fd[2]),fd[0]文件描述符固定用于读管道,而fd[1]固定用于写管道。
管道关闭:close(fd[0]),close(fd[1])。
管道读写:见例子。
标准流管道:基于文件流的模式。FILE *popen;FILE *Pclose
FIFO(有名管道)
(1)说明:可以使互不相关的两个进程实现通信。
创建有名管道:int mkfifo(const char *filename,mode_t mode)
所需头文件#includesys/types.h;#includesys/state.h
创建成功后就可以用open,read,write等函数操作。(参考例子)
信号通信
信号概述:用户进程对信号的响应可以有3种方式:
忽略信号,即对信号不做任何处理,但是有两个信号不能忽略,即SIGKILL及SIGSTOP。
扑捉信号,定义信号处理函数,当信号发生时,执行相应的处理函数。
执行缺省操作,linux对每种信号都规定了默认操作。
信号发送与捕捉
kill()和raise(),raise函数允许进程向自身发送信号。
alarm()和pause()。
alarm称为闹钟函数,可以在进程中设置一个定时器,当定时器指定的时间到时,就向进程发送SIGALARM信号。一个进程只能有一个闹钟时间。
pause用于将调用进程挂起直至捕捉到信号为止,通常可以用于判断信号是否已到。
信号的处理
signal函数:只需把要处理的信号和处理函数列出。
使用信号集函数组。
共享内存
创建共享内存:shmget
映射共享内存:shmat
撤销映射:shmdt
消息队列
多线程编程
文档评论(0)