04-系统调用、网络编程、数据库访问.pptVIP

04-系统调用、网络编程、数据库访问.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
培训内容 系统调用 网络编程理论 网络编程API 数据库访问 系统调用 Linux系统的一切都可以用文件代表,或者可以用一个特殊的文件进行操作。 目录是一个特殊的文件,不可直接读写。 设备也是文件,可以用文件API进行操作。 设备可以分为字符设备和块设备,两者的区别在于访问设备的时候是否需要一次读写一块数据。 系统调用 Linux,Unix中比较重要的三个设备文件: /dev/console 此设备代表控制台,错误信息和诊断信息通常发送到这个设备。 /dev/tty 如果一个程序有控制终端,那么/dev/tty就是这个控制终端的别。 /dev/null 空设备,所有写入这个设备的内容将被丢弃。 系统调用 系统调用定义:   所有的操作系统在其内核里都有一些内建的函数,这些函数可以用来完成一些系统级别的功能。Linux系统使用的这样的函数叫做“系统调用”,英文是systemcall。   这些函数代表了从用户空间到内核空间的一种转换,例如在用户空间调用open函数,则会在内核空间调用sys_open。一个已经安装的系统的支持的所有的系统调用可以在/usr/include/bits/syscall.h文件里面看到。 系统调用   [hwang@langchao hwang]$ head /usr/include/bits/syscall.h   /* Generated at libc build time from kernel syscall list. */   #ifndef _SYSCALL_H   # error Never use directly; include instead.   #endif   #define SYS_stime __NR_stime   #define SYS_getresuid __NR_getresuid   #define SYS_rt_sigqueueinfo __NR_rt_sigqueueinfo   #define SYS_mmap2 __NR_mmap2 系统调用   每个系统调用都有一个定义好的数字,这些数字是用来构造这些系统调用的。内核通过0x80中断来管理这些系统调用。这些系统调用的对应的数字和一些参数都在调用的时候送到某些寄存器里面。   系统调用的数字实际上是一个序列号,表示其在系统的一个数组sys_call_table[]中的位置。 系统调用 定义:   系统调用是操作系统提供给外部程序的接口。在 C 语言中,操作系统的系统调用通常通过函数调用的形式完成,这是因为这些函数封装了系统调用的细节,将系统调用的入口、参数以及返回值用 C 语言的函数调用过程实现。系统调用函数定义在 glibc中,需要注意以下几点: 系统调用函数通常在成功时返回 0 值,不成功时返回非零值。如果要检查失败原因,则要判断全局变量 errno 的值,其 中包含错误代码。 许多系统调用的返回数据通常通过引用(传地址)参数传递。这时,需要在函数参数中传递缓冲区地址,而返回的数据就保存在该缓冲区中。?? 文件操作 文件操作   在I/O操作中,直接使用底层系统调用的效率比较低。原因是: 同函数调用相比,系统调用的开销大些,因为在执行系统调用的时候,Linux必须从用户代码切换到内核代码运行,然后再返回用户代码。?尽可能的减少系统调用,在系统调用中做尽可能多的工作。 硬件会对底层系统调用一次所能读写的数据块作出一定的限制。 文件操作 文件描述符:     每个运行中的程序被称为进程,它有个与之相关联的文件描述符。文件描述符是一些小值整数,可以通过文件描述符访问打开的文件或者设备。多少文件描述符取决于系统的配置情况。当开始运行程序的时候一般会有三个打开的文件描述符: 0:标准输入 1:标准输出 2:标准错误 文件操作 write ? 写文件描述符   系统调用write的作用是把缓冲区buf的前nbytes个字节写入文件描述符关联的文件中。函数返回写入的字节数。如果文件描述符有错或者底层的设备驱动程序对数据块长度比较敏感,返回值可能小于nbytes。如果这个函数的返回值是0,就表示没有写入任何数据,如果是-1则表示函数调用出错,对应的代码保存在全局变量errno里面。 #include unistd.h size_t write(int fides, const void *buf, size_t nbytes)   write可能报告写入字节比nbytes少,这并不一定是个错误应该用errno检查错误。 文件操作 read ? 读文件描述符   系统调用read的作用是从和文件描述符fildes相关联的文件里面读入nbytes个字节的数据,并把它们放到数据区buf中。他返回实际读入的字节数,

文档评论(0)

youyang99 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档