第1214次课linux环境编程_第1页
第1214次课linux环境编程_第2页
第1214次课linux环境编程_第3页
第1214次课linux环境编程_第4页
第1214次课linux环境编程_第5页
已阅读5页,还剩43页未读 继续免费阅读

下载本文档

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

文档简介

1、7.1系统调用和库函数7.1.1系统调用系统调用是操作系统提供的、与用户程序之间的接口,也就是操作系统提供给程序员的接口从感觉上系统调用类似于过程调用,都由程序代码构成,使用方式相同两者有实质差别:过程调用只能在用户态下运行,不能进入态;而系统调用可以实现从用户态到态的转变。系统调用可大致分为五个类别:进程控制、文件管理、设备管理、信息和通信7.1.2库函数它们本身并不属于操作系统的内核部分库函数可以分为下面六大类: 文件管理 状态信息 文件修改 程序设计语言的支持 程序装入和执行 通信应用程序、库函数、系统调用的关系应用程序、s、库函数、系统调用的关系7.1.3调用方式例如,open系统调用

2、可以打开一个指定文件,其函数原型说明如下:#include #include #include int open(const char *path, int oflags);不同的系统调用所需头文件(又称前导文件)是不同的。在C语言程序中,系统调用的调用方式与调用库函数相同int fd;fd=open(/home/mengqc/myfile1,O_RDWR);查看帮助手册:man man查看open帮助:man 2 open7.2文 件 操 作7.2.1有关文件操作的系统调用常用的有关文件操作的系统调用有:creat,open,close,read,wriseek,link,unlink,mk

3、dir,rmdir,chdir,od等例如:#include #include #include int creat(const char *pathname, mode_tmode);#include #include #include int open(const char *path, int oflags);int open(const char *path, int oflags, mode_t mode);7.2.2应用示例open.c文件,代码内容如右,程序实现新建文件o.c,并关闭该文件的功能。执行结果查看write帮助:man 2 write查看lseek帮助:man 2 l

4、seek查看read帮助:man 2 read查看close帮助:man 2 closeopen,write, read,lseek, close综合例子执行结果例7.1 本利说明如何打开、关闭、读和写文件。本程序打开三个文件:rdwr.c,/dev/null,/temp/foo.bar。前者是程序文件本身,-是普通文件,用来读数据;另外两个文件用来写入数据:/tmp/foo.bar是普通文件,而/dev/null是设备文件。O_CREAT 文件不存在,则创建它O_RDONLY 以只读方式O_WRONLY 以只写方式打开文件打开文件O_TRUNC如果文件存在,则将文件长度截为0执行结果:在屏幕

5、上显示程序文件本身。例7.2 本程序主要展示 lseek系统调用的使用情况,并说明lseek有可能搜索到文件结尾以外的地方。这样,以后在那一点写入的任何数据都会加入到文件中,但是面文件结尾处与新数据之间会产生一个“空洞”。空洞中的数据读起来就像它们都是0一样。执行结果:bc命令81952字节文件需要20个盘块,而ls -ls命令显示文件实际只用了12块,二者的差别就反映出文件中存在空洞。7.3进 程 控 制7.3.1有关进程控制的系统调用常用的有关进程控制的系统调用有:fork,exit,getpid,wait,exec,sleep,nice等例如:#include #include pid_

6、tfork(void);#include #include pid_t getpid(void); pid_t getppid(void);查看getpid帮助:man 2getpid使用fork创建程执行结果获取并输出程和父进程的相关信息,父进程等待程结束后再结束执行结果:组标识符相同,pid增1,ppid不同例7.3 该程序说明如何使用有关进程操作的系统调用。本程序利用fork()创建程,利用getpid()和getppid()分别获得进程的PID和父进程PID,使用sleep()将相关进程挂起几秒钟。执行结果例7.4 本程序展示用kill系统调用“杀掉”另一个进程的方式执行结果7.4进

7、程 通 信Linux下进程间通信的几种主要是:管道(pipe)及有名管道(named pipe)、信号(signal)、消息(message)、共享内存(shared memory)、信号量 (semaphore)和套接字(socket)。7.4.1有关进程通信的函数例如:#include int pipe(int filedes2);#include #include int mkfifo(const char *pathname, mode_t mode);管道所谓管道,是指能够连接一个写进程和一个读进程的、并允许它们以生产者消费者方式进行通信的一个共享文件,又称为pipe文件。由写进程从

8、管道的写入端将数据写入管道,而读进程从管道的读出端读出数据。管道可以分为 管道和有名管道两种。匿名管道比有名管道占用更少的系统资源,但其功能不 名管道强大。管道是一种未命名的单向管道,通常用 来在一个父进程和一个程之间传输数据。查看管道帮助:man 2 pipe创建通过在程, 管道,程中写入数据,在父进程中 数据。执行结果例7.5 本程序简单地演示如何使用管道机制进行I/O控制。首先用pipe函数创建一个管道,然后用write函数将消息写入管道,最后用read管道中的内容。执行结果查看有名管道帮助:man 2mkfifo有名管道在文件系统中是可见的,创建时需要指定具体的路径和文件名,创建后可以使用ls命令来查看。执行结果在对有名管道进行操作之前,需要使用open函数来打开该管道文件。如果进程是为了 数据而打开有名管道时,同时已有相应进 写入数据而打开该有名管道,则打开操作会成功返回;否则,如果打开操作设置了阻塞标志,进程会阻塞直到有相应进 写入数据而打开该有名管道。同样地,如果进程是为了写入数据而打开有名管道时,同时已有相应进数据而打开该有名管道,则打开操作会成功返回;否则,如果打开操作设置了阻塞标志,进程会阻塞直到有相应进 数据而打开该有名管道。信号7.5内 存 管 理#include void *malloc(size_t s

温馨提示

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

评论

0/150

提交评论