操作系统-I/O(6)I/O与系统调用
- 最终用户:键盘、鼠标通过操作界面传递给OS
- 用户程序:通过函数(高级语言)转换为系统调用传递给OS
- 标准I/O库函数不能保证文件的安全性(无加/解锁机制)
- 所有I/O都是同步的,只能串行执行,程序必须等待I/O操作完成后才能继续执行
- 有些I/O功能不适合甚至无法使用标准I/O库函数实现,如,不提供读取文件元数据(文件大小和文件创建时间等)的函数
- 用它进行网络编程会造成易于出现缓冲区溢出等风险
ssize_t write(int fd, const void * buf, size_t n);
//fd是文件描述符,每个文件用一个int型的文件描述符来标示文件
//buf是要写的字符串的首地址。buf是void指针,可以通过强制类型转换变成任何类型的指针
//n是要写的字符个数,size_t是unsigned int
//返回值是真正写的字符个数,ssize_t是int,因为返回值可能为-1
write:
pushl %ebx //将EBX入栈(EBX为被调用者保存寄存器)
movl $, %eax //将系统调用号4送EAX
movl (%esp), %ebx //将第一个参数-文件描述符fd送EBX
movl (%esp), %ecx //将第二个参数-所写字符串首址buf送ECX
movl (%esp), %edx //将第三个参数-所写字符个数n送EDX
int $0x80 //进入系统调用处理程序system_call执行
cmpl $-, %eax //检查返回值,假定最大出错码为131(所有正数都小于FFFFFF83H)
jbe .L1 //若无错误,则跳转至.L1(按无符号数比)
negl %eax //将返回值取负送EAX
movl %eax, error //将EAX的值送error
movl $-, %eax //将write函数返回值置-1
.L1:
popl %ebx
ret
操作系统-I/O(6)I/O与系统调用的更多相关文章
- Day3---------Linux操作系统
---恢复内容开始--- 网络基础和DOS命令 一.网络分类 1.地理位置 1).局域网(LAN) 2).城域网(MAN) 3).广域网(WAN) 2.传输介质 1).有线网 2).光纤网 3).无线 ...
- 操作系统层面聊聊BIO,NIO和AIO (epoll)
BIO 有了Block的定义,就可以讨论BIO和NIO了.BIO是Blocking IO的意思.在类似于网络中进行read, write, connect一类的系统调用时会被卡住. 举个例子,当用re ...
- 简介几种系统调用函数:write、read、open、close、ioctl
在 Linux 中,一切(或几乎一切)都是文件,因此,文件操作在 Linux 中是十分重要的,为此,Linux 系统直接提供了一些函数用于对文件和设备进行访问和控制,这些函数被称为系统调用(sysca ...
- [Kernel]理解System call系统调用
转自:http://os.51cto.com/art/200512/13510.htm 现在,您或许正在查看设备驱动程序,并感到奇怪:“函数 foo_read() 是如何被调用的?”或者可能疑惑: “ ...
- [转帖]PostgreSQL ident和peer基于操作系统用户的认证
PostgreSQL ident和peer基于操作系统用户的认证 https://yq.aliyun.com/articles/55898 其实 local和127. 还是有区别的 这里面应该就是对应 ...
- 《操作系统导论》第14章 | 内存操作API
内存类型 在运行一个C程序的时候,会分配两种类型的内存.第一种称为栈内存,它的申请和释放操作是编译器来隐式管理的,所以有时也称为自动内存.假设需要在func()函数中为一个整形变量x申请空间,我们只需 ...
- Python异步通信模块asyncore
https://docs.python.org/2/library/asyncore.html This module provides the basic infrastructure for wr ...
- goroutine
Go语言从诞生到普及已经三年了,先行者大都是Web开发的背景,也有了一些普及型的书籍,可系统开发背景的人在学习这些书籍的时候,总有语焉不详的感觉,网上也有若干流传甚广的文章,可其中或多或少总有些与事实 ...
- .net开发笔记(十三) Winform常用开发模式第一篇
上一篇博客最后我提到“异步编程模型”(APM),之后本来打算整理一下这方面的材料然后总结一下写篇文章与诸位分享,后来在整理的过程中不断的延伸不断地扩展,发现完全偏离了“异步编程”这个概念,前前后后所有 ...
- [转载] goroutine背后的系统知识
原文: http://www.sizeofvoid.net/goroutine-under-the-hood/ 文章写的非常好, 对内部原理解释的非常清楚, 是我喜欢的风格, 感谢作者的精彩文章. = ...
随机推荐
- PHP系列之钩子
PHP 提供的钩子 PHP 和 Zend Engine 为扩展提供了许多不同的钩子,这些扩展允许扩展开发人员以 PHP userland 无法提供的方式控制 PHP 运行时. 本章将展示各种钩子和从扩 ...
- PHP date_sun_info() 函数
------------恢复内容开始------------ 实例 返回有关 2013 年 1 月 1 日,纬度 31.7667,经度 35.2333 的日出/日落和黄昏开始/黄昏结束的信息: < ...
- Python网络数据采集PDF高清完整版免费下载|百度云盘|Python基础教程免费电子书
点击获取提取码:jrno 内容提要 本书采用简洁强大的 Python 语言,介绍了网络数据采集,并为采集新式网络中的各种数据类 型提供了全面的指导.第一部分重点介绍网络数据采集的基本原理:如何用 Py ...
- 【python接口自动化】- ConfigParser配置文件的使用
前言:目前我们使用的绝大多数计算机程序,无论是办公软件,浏览器,甚至游戏.视频都是通过菜单界面系统配置的,它几乎成了我们使用机器的默认方式.而在python中,也有这样的一个配置模块可以把代码可配置化 ...
- Python Selenium 搭建Web UI自动化
Python搭建UI自动化环境 下载Python3 Python官网 PyCharm 环境配置 安装Python 勾选Add Python to PATH,一直下一步. 验证:CMD输入Python ...
- Ajax 提交图片
话不多说,直接上代码 页面部分 <form id="form1" enctype="multipart/form-data"> id_token: ...
- 2017面向对象程序设计(Java)第十三周助教工作总结
时间飞逝,本学期即将接近尾声.不知不觉同学们已经学习java十三个星期了,想必同学们对Java课程体系及内容有了更加深入的理解,也应该摸索出了一套适用于自己的学习方法. 下面我对上周工作做以简单总结: ...
- tp3.2 新增邮件类
1.新建方法 调用发送邮件,我的目录在/admin下 2.新增邮件方法 类的发送配置功能 文件地址: 网站根目录\项目目录\Admin\Common\ 文件 名 :function.php ...
- vue-cli脚手架的搭建
1.安装node.js 2.安装cnpm npm install -g cnpm --registry=https://registry.npm.taobao.org 3.安装vue-cli npm ...
- 记Java中有关内存的简单认识
一.Java内存划分 分为五个部分,可以参考这篇笔记简单认识一下: https://www.cnblogs.com/unleashed/p/13268027.html 栈 堆 方法区 本地方法栈 寄存 ...