I/O基本操作

ssize_t read(int fd,void* buffer,size_t count)

read调用并会在在buffer的末尾添加一个‘\0‘,所以若将buffer当作字符串处理的话需要自行添加‘\0‘,常用操作如下:

if((read_num = read(fd,buffer,count) > 0)

{

  buffer[read_num] = ‘\0‘;

  ...

}

fflush和fsync的区别:

fflush是C库中提供的库函数,而fsync是系统提供的系统调用

fflush通过调用write将用户空间的缓冲区写到内核空间的缓冲区中,而fsync将内核缓冲区中的数据冲洗到磁盘上

另外fsync是阻塞调用

数据的流动顺序如下:

printf等IO操作------>用户空间缓冲区(C库缓冲区)----->fflush(它会调用write)----->内核缓冲区------>fsync------>磁盘

如果程序的文件偏移量(对于每个打开的文件,系统内核会记录其偏移量)已然超过了文件末尾,再进行IO操作会发生什么。。。

--对于read调用会返回0,表示文件结尾

--对于write,可写入数据,但会形成文件空洞(从文件结尾到新写入数据间的这段空间称为空洞)。从编程角度讲,文件空洞中是存在字节的,读取空洞将返回以0(空字节)填充的缓冲区;但文件空洞并不占用任何磁盘空间,直到后续某个时点为在文件空洞中写入数据,文件系统才会为其分配磁盘块

时间: 2024-10-10 05:50:58

I/O基本操作的相关文章

<二叉树的基本操作>

#include<stdio.h> #include<stdlib.h> #include<string.h> #define num 100 #define OK 1 typedef int Status; typedef char DataType; typedef struct node { DataType data; struct node *lchild,*rchild; }BinTNode,*BinTree; Status CreateBiTree(Bin

iOS_UITextField 基本操作

基本操作 UITextField *userNameTextField = [[UITextField alloc] init]; userNameTextField.frame = CGRectMake(30, 100, 220, 50); [self.window addSubview:userNameTextField]; [userNameTextField release]; // 设置样式 userNameTextField.borderStyle = UITextBorderSty

Mongodb入门系列(4)——Mongodb体系结构与客户端基本操作及注意细节

说到Mongodb的体系结构,免不了与关系型数据库做个对比.这里以MySQL为例,我们进行一些比较: 从逻辑结构上对比: MySQL层次概念 MongoDB层次概念 数据库(database) 数据库(database) 表(table) 集合(collection) 记录(row) 文档(document) 在MongoDB中没有行.列.关系的概念,集合中的文档相当于一条记录,这体现了模式自由的特点. 从数据存储结构上对比: MySQL的每个数据库存放在一个与数据库同名的文件夹中,MySQL如

Oracle的基本操作-解除用户,赋予权限

一.表的基本操作 1. 用户管理 1.1 初始状态下系统的用户 在系统用户下,执行下面的查询语句可以查看到当前系统的所有用户  select * from dba_users; 1.2 创建一个用户 SQL> create user xp identified by xp; User created. 授予连接数据库的权限:SQL> grant connect to xp; Grant succeeded. SQL> conn xp/xp;Connected. 1.3 解锁一个用户并修改

数据结构中线性表的基本操作-合并两个线性表-依照元素升序排列

#include<iostream> #include<stdlib.h> #define LIST_INIT_SIZE 10/*线性表初始长度*/ #define LIST_CREATENT 2/*每次的增量*/ typedef int ElemType; using namespace std; typedef struct SqList/*线性表的数据结构定义*/ { ElemType *elem;/*线性表基址*/ int length;/*当前线性表所含的元素个数*/ i

【华为技术】VRP平台基本操作

一.显示系统信息 <Huawei>display version 图上所示可以知道VRP平台信息,运行的版本,运行的时间 二.修改和查看设备系统时间参数 1.查看时间 <Huawei>display clock 2.修改系统日期和时间 三.进入系统视图界面 <Huawei>system-view 可以配置接口.路由协议等 四.修改设备名称 五.配置登录标语信息 [R1]header shell information "Welcome to Huawei ro

Mysql查询优化从入门到跑路(三)查询的基本操作

查询的基本操作 1.选择操作 对应的是限制条件,操作对象是二维表的行. 优化方式:选择操作下推 目的:尽量减少连接操作前的元租数,使得中间临时关系尽量少(元祖数少,连接得到的元组数就少) 好处:这样可能减少IO和CPU的消耗.节约内存空间 2.投影操作 对用的SELECT查询的目的列对象 优化方式:投影操作下推 目的:尽量减少连接操作前的列数,使得中间临时关系尽量小(选择操作是使元组的个数尽量少,投影操作是使一条元组尽量少) 好处:虽然不能减少IO(多数数据库存储方式是行存储,元组是读取的最基本

TP框架对数据库的基本操作

数据库的操作,无疑就是连接数据库,然后对数据库中的表进行各种查询,然后就是对数据的增删改的操作,一步步的讲述一下框架对数据库的操作 想要操作数据库,第一步必然是要:链接数据库 一.链接数据库 (1)找到模块文件夹中的Conf文件夹,然后进行编写config.php文件 我这里是这样的文件路径 (2)打开这个config.php文件,然后找到父类配置文件convention.php文件,将关于"数据库"的部分复制粘贴到config.php配置文件中 1 2 3 4 5 6 7 8 9 /

图形数据库Neo4J的基本操作

1.创建一个节点 1 语法:CREATE (node-name:label-name{Property1-name:Property1-Value,...Propertyn-name:Propertyn-Value}) 2 如: 3 create(江湖流派:明教{name:'张无忌',skill:'九阳真经'}) 2.为两个节点建立关系 1 语法:CREATE(node1:label1)-[relationship-name:relationship-label-name]->(node2:la

Key/Value之王Memcached初探:二、Memcached在.Net中的基本操作

一.Memcached ClientLib For .Net 首先,不得不说,许多语言都实现了连接Memcached的客户端,其中以Perl.PHP为主. 仅仅memcached网站上列出的语言就有:Perl.PHP.Python.Ruby.C#.C/C++以及Lua等. 那么,我们作为.Net码农,自然是使用C#.既然Memcached客户端有.Net版,那我们就去下载一个来试试. 下载文件:http://pan.baidu.com/s/1w9Q8I memcached clientlib项目