第7章 Linux环境编程.ppt

上传人:hyn****60 文档编号:70761483 上传时间:2023-01-27 格式:PPT 页数:12 大小:80KB
返回 下载 相关 举报
第7章 Linux环境编程.ppt_第1页
第1页 / 共12页
第7章 Linux环境编程.ppt_第2页
第2页 / 共12页
点击查看更多>>
资源描述

《第7章 Linux环境编程.ppt》由会员分享,可在线阅读,更多相关《第7章 Linux环境编程.ppt(12页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、第7章 Linux环境编程 主要内容n系统调用和库函数简介n文件操作n进程管理和同步n进程通信n内存管理 7.1 系统调用和库函数 7.1.1 系统调用n系统调用是操作系统提供的、与用户程序之间的接口,也就是操作系统提供给程序员的接口 n从感觉上系统调用类似于过程调用,都由程序代码构成,使用方式相同 n两者有实质差别:过程调用只能在用户态下运行,不能进入核心态;而系统调用可以实现从用户态到核心态的转变。n系统调用可大致分为五个类别:进程控制、文件管理、设备管理、信息维护和通信 7.1.2 库函数n它们本身并不属于操作系统的内核部分 n库函数可以分为下面六大类:文件管理 状态信息 文件修改 程序

2、设计语言的支持 程序装入和执行 通信 7.1.3 调用方式n例如,creat系统调用可以创建一个新文件,其函数原型说明如下:#include#include#include int open(const char*path,int oflags);n不同的系统调用所需要的头文件(又称前导文件)是不同的。7.2 文 件 操 作7.2.1 有关文件操作的系统调用n常用的有关文件操作的系统调用有:creat,open,close,read,write,lseek,link,unlink,mkdir,rmdir,chdir,chmod等 n例如:#include#include#include int

3、 creat(const char*pathname,mode_t mode);n#include#include#include int open(const char*path,int oflags);int open(const char*path,int oflags,mode_t mode);7.2.2 应用示例 n/*rdwr.c-The read and write system calls*/n#include n#include n#include n#include n#include n#include nint main(void)nn int fd1,fd2,fd3,

4、nbytes;n int flags=O_CREAT|O_TRUNC|O_WRONLY;n char buf10;n if(fd1=open(rdwr.c,O_RDONLY,0644)0)n perror(open rdwr.c);n exit(EXIT_FAILURE);n n if(fd2=open(/dev/null,O_WRONLY)0)n perror(open/dev/null);n exit(EXIT_FAILURE);n n nif(fd3=open(/tmp/foo.bar,flags,0644)0)n if(write(fd2,buf,10)0)n perror(write

5、/dev/null);n if(write(fd3,buf,nbytes)0)n perror(write/tmp/foo.bar);n write(STDOUT_FILENO,buf,10);n n close(fd1);n close(fd2);n close(fd3);n exit(EXIT_SUCCESS);n 7.3 进 程 控 制7.3.1 有关进程控制的系统调用n常用的有关进程控制的系统调用有:fork,exec,wait,exit,getpid,sleep,nice等 n例如:#include#include pid_t fork(void);n#include#include

6、 pid_t getpid(void);pid_t getppid(void);7.3.2 应用示例n/*proc1.c演示有关进程操作*/n#include n#include n#include n#include nint main(int argc,char*argv)nn pid_t pid,old_ppid,new_ppid;n pid_t child,parent;n parent=getpid();/*获得本进程的PID*/n if(child=fork()0)n fprintf(stderr,%s:fork of child failed:%sn,argv0,strerror

7、(errno);n exit(1);n n nelse if(child=0)/*此时是子进程被调度运行*/n old_ppid=getppid();n sleep(2);n new_ppid=getppid();n n else n sleep(1);n exit(0);/*父进程退出*/n n /*下面仅子进程运行*/n printf(Original parent:%dn,parent);n printf(Child:%dn,getpid();n printf(Childs old ppid:%dn,old_ppid);n printf(Childs new ppid:%dn,new_p

8、pid);n exit(0);n 7.4 进 程 通 信Linux下进程间通信的几种主要手段是:管道(pipe)及有名管道(named pipe)、信号(signal)、消息(message)、共享内存(shared memory)、信号量(semaphore)和套接口(socket)。7.4.1 有关进程通信的函数n例如:n#include nint pipe(int filedes2);n#include n#include nint mkfifo(const char*pathname,mode_t mode);7.4.2 应用示例n/*pipedemo.c演示使用管道机制进行I/O控制

9、*/n#include n#include n#include nint main(int argc,char*argv)nn static const char mesg=Happy New Years to you!;n char bufBUFSIZ;n size_t rcount,wcount;n int p_fd2;n size_t n;n if(pipe(p_fd)0)/*创建管道*/n fprintf(stderr,%s:pipe failed:%sn,argv0,strerror(errno);n exit(1);n n printf(Read end=fd%d,write en

10、d=fd%dn,p_fd0,p_fd1);n n=strlen(mesg);n nif(wcount=write(p_fd1,mesg,n)!=n)/*写入数据*/n fprintf(stderr,%s:write failed:%sn,argv0,strerror(errno);n exit(1);n n if(rcount=read(p_fd0,buf,BUFSIZ)!=wcount)/*读出数据*/n fprintf(stderr,%s:read failed:%sn,argv0,strerror(errno);n exit(1);n n bufrcount=0;n printf(Read from pipen,buf);n close(p_fd0);n close(p_fd1);n return 0;n 7.5 内 存 管 理 n#include nvoid*malloc(size_t size);n#include nvoid*calloc(size_t nmemb,size_t size);n#include nvoid*realloc(void*ptr,size_t size);n#include nvoid free(void*ptr);

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 生活常识

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com