- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
四川大学 linux 第章 Linux系统调用
第6章 Linux系统调用 6.1 Linux系统调用概述 系统调用是Linux操作系统内核提供给用户程序的接口; 应用程序通过该接口使用系统资源; 如果没有系统调用,应用程序失去内核的支持,也无法利用内核提供的系统资源。 6.1 Linux系统调用概述 系统调用主要分为如下几类: 文件系统控制类; 文件系统操作类; 进程控制类; 操作系统控制类; 内存管理类; 网络管理类; Socket控制类; 用户管理类; 进程间通信类。 6.1 Linux系统调用概述 系统调用是一种函数调用,与一般的函数调用相比,在表现方式上和实现效果上有明显不同: 表现方式上的不同:一般函数调用时直接由调用过程转向被调用过程;而系统调用不允许由调用过程直接转向被调用过程,要借助于信号(软中断),先进入系统内核,再转向相应的系统调用。 实现效果上的不同:一般函数调用一直在用户空间上进行,不能进入操作系统内核空间;而系统调用需要从用户空间切换到内核空间,并在内核空间下进行。由于内核空间处于保护模式下,更加安全。因此,通过系统调用方式提供给应用程序使用内核资源不但更加安全,而且优先级高,响应速度快,效率高。 6.1 Linux系统调用概述 6.1 Linux系统调用概述 在C语言中存在一系列链接库,在链接库中含有一系列函数调用,如链接库stdio.h中含有标准输入、输出操作的fopen、fclose,fread、fwrite、fseek、ftell等,用户应用程序调用这些链接库函数。这些函数位于操作系统之上,需要通过系统调用才能和操作系统内核取得联系。 6.2文件系统类系统调用 fcntl:文件控制; flock:文件加/解锁; create:创建新文件; open:打开文件; close:关闭文件; read:读文件; write:写文件; ready:从文件读入数据到缓冲数组中; writey:将缓冲数组里的数据写入文件; pread:对文件随机读; pwrite:对文件随机写; lseek:移动文件指针; _llseek:在64位地址空间里移动文件指针; dup:复制已打开的文件描述符; dup2:按指定条件复制文件描述符。 6.2文件系统类系统调用 1. 文件控制fcntl 文件控制系统调用fcntl针对文件描述符进行控制。该系统调用格式为: int fcntl(int fd,int cmd,arg); 其中:fd是文件描述符;cmd是控制类型;arg为返回值。 如果该系统调用成功,则返回整数cmd;如果该系统调用失败,则返回-1,表示出错。 arg参数总是一个整数,通常在文件fcntl.h中定义。在作为记录锁用时,指向一个结构的指针。 fcntl函数有5种功能: (1)当cmd=F_DUPFD时,其功能为复制一个现有的文件描述符。fcntl返回值为新的文件描述符, 该描述符的值为: 最小的大于或等于arg的一个可用的描述符; 与原始操作符一样的某对象的引用; 如果对象是文件(file)的话,则返回一个新的描述符,这个描述符与arg 共享相同的偏移量(offset); 相同的访问模式(读,写或读/写); 相同的文件状态标志(如:两个文件描述符共享相同的状态标志); 与新的文件描述符结合在一起的close-on-exec 标志被设置成交叉式访问execve(2)的系统调用。 6.2文件系统类系统调用 (2)当cmd=F_GETFD或F_SETFD时,其功能为获得/设置文件描述符标志,fcntl返回值为响应标志。 cmd=F_GETFD时:取得与文件描述符fd联合close-on-exec标志,类似FD_CLOEXEC。如果返回值和FD_CLOEXEC进行与运算结果是0的话,文件保持交叉式访问exec(),否则如果通过exec运行的话,文件将被关闭(arg 被忽略)。 cmd=F_SETFD时:设置close-on-exec 旗标。该旗标以参数arg 的FD_CLOEXEC位决定。 6.2文件系统类系统调用 (3)当cmd=F_GETFL或F_SETFL时,其功能为获得/设置文件状态标志,fcntl返回值为一个正的进程ID或负的进程组ID。。 cmd=F_GETFL时:取得fd的文件状态标志,如同下面的描述一样(arg被忽略)。 cmd=F_SETFL时:设置给arg描述符状态标志,可以更改的几个标志是:O_APPEND, O_NONBLOCK,O_SYNC和O_ASYNC。 在修改文件描述符标志或文件状态标志时必须谨慎,先要取得现在的标志值,然后按照希望修改它,最后设置新标志值。不能只是执行F_SETFD或F_SETFL命令,这样会关闭以前设置的标志位。 6.2文件系统类系
文档评论(0)