简介

在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笔记的更多相关文章

  1. Linux非阻塞IO(六)使用poll实现非阻塞的服务器端

    关于poll模型监听的事件以及返回事件,我们定义宏如下: #define kReadEvent (POLLIN | POLLPRI) #define kWriteEvent (POLLOUT | PO ...

  2. Linux非阻塞IO(五)使用poll实现非阻塞的回射服务器客户端

    前面几节我们讨论了非阻塞IO的基本概念.Buffer的设计以及非阻塞connect的实现,现在我们使用它们来完成客户端的编写. 我们在http://www.cnblogs.com/inevermore ...

  3. Linux非阻塞IO(四)非阻塞IO中connect的实现

    我们为客户端的编写再做一些工作. 这次我们使用非阻塞IO实现connect函数. int connect(int sockfd, const struct sockaddr *addr, sockle ...

  4. Linux非阻塞IO(三)非阻塞IO中缓冲区Buffer的实现

    本文我们来实现回射服务器的Buffer.   Buffer的实现   上节提到了非阻塞IO必须具备Buffer.再次将Buffer的设计描述一下: 这里必须补充一点,writeIndex指向空闲空间的 ...

  5. Linux非阻塞IO(二)网络编程中非阻塞IO与IO复用模型结合

    上文描述了最简易的非阻塞IO,采用的是轮询的方式,这节我们使用IO复用模型.   阻塞IO   过去我们使用IO复用与阻塞IO结合的时候,IO复用模型起到的作用是并发监听多个fd. 以简单的回射服务器 ...

  6. Linux非阻塞IO(八)使用epoll重新实现非阻塞的回射服务器

    本文无太多内容,主要是几个前面提到过的注意点: 一是epoll的fd需要重新装填.我们将tcp_connection_t的指针保存在数组中,所以我们以这个数组为依据,重新装填fd的监听事件. //重新 ...

  7. Linux非阻塞IO(七)使用epoll重新实现客户端

    使用poll与epoll的区别主要在于: poll可以每次重新装填fd数组,但是epoll的fd是一开始就加入了,不可能每次都重新加入 于是采用这种策略: epoll除了listenfd一开始就监听r ...

  8. linux文件IO操作篇 (一) 非缓冲文件

    文件IO操作分为 2 种 非缓冲文件IO 和 缓冲文件IO 它们的接口区别是 非缓冲 open() close() read() write() 缓冲 fopen() fclose() fread() ...

  9. 《linux设备驱动开发详解》笔记——8阻塞与非阻塞IO

    8.1 阻塞与非阻塞IO 8.1.0 概述 阻塞:访问设备时,若不能获取资源,则进程挂起,进入睡眠状态:也就是进入等待队列 非阻塞:不能获取资源时,不睡眠,要么退出.要么一直查询:直接退出且无资源时, ...

随机推荐

  1. java jdbc连接mysql

    JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口 ...

  2. 关于如何用sql语句查询出连续的一串数字

    在数据库操作中,经常有一些这样的操作:插入诺干条测试数据.查询这个月的登录情况(没有登录的日期不能不存在,要显示数量为0),获取诺干条guid. 这些的基础都是怎么生成连续的一串数字  1 2  3  ...

  3. XML语言:可扩展的标记语言;

    作用:1. 解决跨语言的数据交换,C#与Javascript 语言的数据交换:. 2.XML:用于数据的存储以及传输:1.新建方法: 在解决方案资源管理器----选中网站名---右击添加新建项---- ...

  4. JQuery multiselect的相关使用

    这两天做项目需要用到多选控件,于是选择了JQuery  multiselect控件,介绍一下常用的一些相关属性. 详细地址:http://davidstutz.github.io/bootstrap- ...

  5. 【转】windows 如何查看端口占用情况?

    开始--运行--cmd 进入命令提示符 输入netstat -ano 即可看到所有连接的PID 之后在任务管理器中找到这个PID所对应的程序如果任务管理器中没有PID这一项,可以在任务管理器中选&qu ...

  6. Differential Geometry之第五章曲面的内蕴几何学

    第五章.曲面的内蕴几何学 1.曲面的等距变换 2.曲面的协变微分 协变微分: 3.测地曲率与测地线 4.测地坐标系 4.1.测地平行坐标系 4.2.测地极坐标系和法坐标系 5.Gauss-Bonnet ...

  7. 【.NET基础】--委托、事件、线程(1)

    1,委托 是存放方法的指针的清单,也就是装方法的容器 A, 新建winform项目[01委托],项目中添加dg_SayHi.cs 委托类 用于存储方法 namespace _01委托 { //定义委托 ...

  8. Process Stats:了解你的APP如何使用内存(转)

    原文地址:http://android-developers.blogspot.com/2014/01/process-stats-understanding-how-your.html?m=1 原作 ...

  9. 番外篇 之 C#委托

    对于上一节 番外篇之C#多线程的反思 反思一:   Thread th = new Thread(参数); ////参数的总结 ////首先,第一情况,对于 Thread th = new Threa ...

  10. Warning: Permanently added '...' (RSA) to the list of known hosts --Windows下git bash 警告处理

    原链接地址 StackOverflow 处理方法: 创建文件~/.ssh/config, 此处对应windows当前用户目录下的.ssh文件夹 增加如下语句 UserKnownHostsFile ~/ ...