linux 非缓冲io笔记
简介
在linux中,打开的的文件(可输入输出)标识就是一个int值,如下面的三个标准输入输出
STDIN_FILENO/STDOUT_FILENO/STDERR_FILENO这三个是标准输入输出,对应0,1,2
open(文件路径,读写标识,其它不定参数)
read(文件标识,缓冲区,要读的字节数):从文件中读取指定的字节数到缓冲区,返回值为实际读取的字节
write(文件标识,缓冲区,要写的字节数):将缓冲区中指定的字节数写入到文件中
close(文件标识):关闭文件
读写标识,常用的有O_RDONLY,O_WRONLY,O_RDWR,O_APPEND,O_TRUNC
lseek(文件标识,偏移量,偏移起始位置),其中偏移的起始位置有三个:
SEEK_SET:文件头
SEEK_CUR:当前位置
SEEK_END:文件尾
例1
#include <sys/types.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <stdio.h>
#include <unistd.h>
struct people{
const char name[10];
int age;
};
int main(){
int fd;
if((fd=open("./test_file",O_RDWR|O_TRUNC|O_CREAT))<0){
perror("open file error");
return -1;
}
struct people a={"zhangsan",20},b={"lisi",40},
c={"wangwu",50},d={"zhaoliu",60};
write(fd,&a,sizeof(a));
write(fd,&b,sizeof(b));
write(fd,&c,sizeof(c));
write(fd,&d,sizeof(d));
printf("input your choice:");
int num;
scanf("%d",&num);
switch(num){
case 1:
lseek(fd,0,SEEK_SET);break;
case 2:
lseek(fd,sizeof(struct people),SEEK_SET);break;
case 3:
lseek(fd,sizeof(struct people)*2,SEEK_SET);break;
default:
lseek(fd,sizeof(struct people)*3,SEEK_SET);
}
struct people test;
if(read(fd,&test,sizeof(struct people))<0){
perror("read file error");
return 1;
}
printf("your choice is %s,%d\n",test.name,test.age);
close(fd);
return 0;
例子2
dup函数用于将现在的文件标识复制一份给其它人, 以达到转接的作用
dup2函数与dup作用一样,但过程不一样,dup2会将第二个参数的文件描述符关闭, 然后再复制文件标识
下面的例子将STDOUT_FILENO转接到test.txt文件, 于是printf打印的字符串不会显示在终端窗口, 而是写入到文件中
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <fcntl.h>
void err_quit(const char *str){
perror(str);
exit(1);
}
int main(){
int fd;
if((fd=open("./test.txt",O_RDWR|O_CREAT|O_TRUNC))<0)
err_quit("open error");
char *str="this is a test\n" ;
if(dup2(fd,STDOUT_FILENO)<0)
err_quit("dup2 error");
printf("%s",str);
return 0;
}
linux 非缓冲io笔记的更多相关文章
- Linux非阻塞IO(六)使用poll实现非阻塞的服务器端
关于poll模型监听的事件以及返回事件,我们定义宏如下: #define kReadEvent (POLLIN | POLLPRI) #define kWriteEvent (POLLOUT | PO ...
- Linux非阻塞IO(五)使用poll实现非阻塞的回射服务器客户端
前面几节我们讨论了非阻塞IO的基本概念.Buffer的设计以及非阻塞connect的实现,现在我们使用它们来完成客户端的编写. 我们在http://www.cnblogs.com/inevermore ...
- Linux非阻塞IO(四)非阻塞IO中connect的实现
我们为客户端的编写再做一些工作. 这次我们使用非阻塞IO实现connect函数. int connect(int sockfd, const struct sockaddr *addr, sockle ...
- Linux非阻塞IO(三)非阻塞IO中缓冲区Buffer的实现
本文我们来实现回射服务器的Buffer. Buffer的实现 上节提到了非阻塞IO必须具备Buffer.再次将Buffer的设计描述一下: 这里必须补充一点,writeIndex指向空闲空间的 ...
- Linux非阻塞IO(二)网络编程中非阻塞IO与IO复用模型结合
上文描述了最简易的非阻塞IO,采用的是轮询的方式,这节我们使用IO复用模型. 阻塞IO 过去我们使用IO复用与阻塞IO结合的时候,IO复用模型起到的作用是并发监听多个fd. 以简单的回射服务器 ...
- Linux非阻塞IO(八)使用epoll重新实现非阻塞的回射服务器
本文无太多内容,主要是几个前面提到过的注意点: 一是epoll的fd需要重新装填.我们将tcp_connection_t的指针保存在数组中,所以我们以这个数组为依据,重新装填fd的监听事件. //重新 ...
- Linux非阻塞IO(七)使用epoll重新实现客户端
使用poll与epoll的区别主要在于: poll可以每次重新装填fd数组,但是epoll的fd是一开始就加入了,不可能每次都重新加入 于是采用这种策略: epoll除了listenfd一开始就监听r ...
- linux文件IO操作篇 (一) 非缓冲文件
文件IO操作分为 2 种 非缓冲文件IO 和 缓冲文件IO 它们的接口区别是 非缓冲 open() close() read() write() 缓冲 fopen() fclose() fread() ...
- 《linux设备驱动开发详解》笔记——8阻塞与非阻塞IO
8.1 阻塞与非阻塞IO 8.1.0 概述 阻塞:访问设备时,若不能获取资源,则进程挂起,进入睡眠状态:也就是进入等待队列 非阻塞:不能获取资源时,不睡眠,要么退出.要么一直查询:直接退出且无资源时, ...
随机推荐
- Oracle 经典语法(四)
1. 各个部门平均.最大.最小工资.人数,按照部门号升序排列.SELECT deptno AS 部门号,AVG(sal) AS 平均工资 ,MAX(sal) AS 最高工资,MIN(sal) AS ...
- MySQL中MyISAM引擎及InnoDB引擎的缓存优化设计
MyISAM引擎中,为了提高io效率以及读取效率,将对磁盘频繁读取的索引数据加载至内存中操作. MyISAM设计了一个在存放在内存中的索引缓冲池Key Cache.Key Cache只缓存索引数据,通 ...
- jquery插件开发规范
一.请给你的代码加上注释 这个世界不存在百分百的完美的jquery插件,注释不止是给别人看.更重要的是给自己看. 你应该把注释当做你代码的一部分,养成随手加注释的习惯,尤其是编写javascript的 ...
- 实例--post请求,完成一个抽奖程序概率的测试
一个web项目测试,测试抽奖概率的正确性,写了一个小代码,验证概率 post和get请求的一个工具类 package kankan_interface; import java.io.IOExcept ...
- 上架第一个APP到苹果商店被拒绝5次
- : Metadata Rejected (APP中的注册时跳转的 - 用户协议视图没有内容).Waiting For Review 6天 In Review 1天 第二次被拒绝 -- : Met ...
- 洛谷P1717 钓鱼
P1717 钓鱼 41通过 116提交 题目提供者该用户不存在 标签贪心 难度提高+/省选- 提交该题 讨论 题解 记录 最新讨论 暂时没有讨论 题目描述 话说发源于小朋友精心设计的游戏被电脑组的童鞋 ...
- 基础面试题——Javascript
1.介绍js的基本数据类型 Undefined.Null.Boolean.Number.String 2.js有哪些内置对象? 数据封装类对象:Object.Array.Boolean.Number ...
- 干货:Android 源码使用心得分享
我相信很多初学者会和我一样经常在网上去找Android开发源码,但是往往因为运行不起来非常的懊恼!在做爱开发网站的时候,收集App代码时就遇到了这种困难,我相信网络上面的源码大部分在发布前 ...
- DynamicObject数据包操作
DynamicObject的结构非常简单明了,就是一个字典,类似于一个Dictionary<string, object>,其中的object可能是一个简单值(普通字段),可能是一个复杂值 ...
- 在远程系统上开发 SharePoint 应用程序
适用范围: apps for SharePoint | Office 365 | SharePoint Foundation 2013 | SharePoint Server 2013 使用远程安装的 ...