linux IO

以下内容仅表示自己的学习笔记,对其中一些知识的见解,防止遗忘,不喜勿喷。错误之处,欢迎发邮箱指导:[email protected]

阻塞:没有获得资源则进程挂起,直到获取资源为止。挂起进程进入睡眠状态,给调度的等待队列移走,直到等待条件满足。

非阻塞:操作设备部不挂起,或放弃,或反复查询。

非阻塞和阻塞区别:非阻塞:不断查询,消耗CPU;阻塞时进程进入休眠状态,将CPU资源让给其他资源

阻塞唤醒:1,唤醒休眠进程,最大可能在中断里,往往伴随中断

2,或者等待队列唤醒

关于struct 和 class区别:

1):默认继承访问权限:struct是public、class是private

2):struct作为数据结构的实现体,默认数据访问是publie,class对象实现体,默认数据访问是private

3):只有class能定义模板参数

1, Linux 中的文件主要分为 4 种:普通文件、目录文件、链接文件和设备文件。

2,所有对设备和文件的描述都使用文件描述符进行的。打开文件的时候向内核返回一个文件描述符。

3,文件IO:有缓冲:eg: fopen

标准IO:无缓冲:eg: open

4,定位:可以选择读取数据的大小和位置

lseek(int fd, off_offest, int whence):出错返回:-1

Offset:偏移量(单位字节,可正、可负)

Whence:SEEK_SET:当前位置 为开头

: SEEK_CUR:当前位置为文件指针位置

:SEEK_END: 文件结尾

5,文件锁:1,lockf():对文件施加建议锁

2,fcntl():对文件施加建议锁,也可以施加强制锁(用的最多)---->记录锁

6,串口通信:1,并行通信:传输距离短,速度快

2,串行通信:传输距离长,速度慢

UART操作主要:数据接收,数据发送,产生中断,设置Loopback模式,红外模式,硬软流控模式

标准IO

1,输出一个字符:fpuct()

2,打开文件,失败返回值NULL:fopen():打开文件路径和模式

Fdopen():打开文件描述符合模式

Freopen():打开文件、模式和特定IO流

3,关闭文件:fclose()

4,读IO:fread(void * ptr,size_t size,size_t nmemb,FILE * stream)

Ptr:缓存区,size:读取大小(每次读取大小),nmemb:读取记录数(总数),stream:要读取文件流

写IO:fwrite(const void * ptr,size_t size,size_t nmemb,FILE * stream)

5,字符输入输出:

1)读写一个字符---->输入getc(file *stream)

Fgetc(file *stream)Stream: 文件流

输出:putc(int c, file *stream)

Fpuct(int c, file *stream)

C:字符,stream:文件流

2)行输入:gets(char *s)

Fgets(char *s, int size, file *stream)

行输出:puts(const char *s)

Fputs(const char *s, file *stream)

失败返回:NULL

3)格式化输入输出:

输出:int printf(const char *format)

Int fprintf(file *fp, const char *format)

Int sprintf(char *buf, const char *format)

Format:输出格式,fp:文件描述符,buf:缓存区

失败返回:NULL

输入:int scanf(const char *format)

Int fscanf(file *fp, const char *format)

Int sscanf(file *fp, const char *format)

Format:输入格式,fp:文件描述符,buf:缓存区

失败返回:NULL

----------------------------------------------------写于2015年4月10号

时间: 2024-12-18 23:28:39

linux IO的相关文章

Linux IO模式及 select、poll、epoll详解

注:本文是对众多博客的学习和总结,可能存在理解错误.请带着怀疑的眼光,同时如果有错误希望能指出. 同步IO和异步IO,阻塞IO和非阻塞IO分别是什么,到底有什么区别?不同的人在不同的上下文下给出的答案是不同的.所以先限定一下本文的上下文. 本文讨论的背景是Linux环境下的network IO. 一 概念说明 在进行解释之前,首先要说明几个概念: - 用户空间和内核空间 - 进程切换 - 进程的阻塞 - 文件描述符 - 缓存 I/O 用户空间与内核空间 现在操作系统都是采用虚拟存储器,那么对32

block_dump观察Linux IO写入的具体文件(mysqld)

一.使用方法: 二.基本原理: 三.总结 很多情况下开发者调测程序需要在Linux下获取具体的IO的状况,目前常用的IO观察工具用vmstat和iostat,具体功能上说当然是iostat更胜一筹,在IO统计上时间点上更具体精细.但二者都是在全局上看到IO,宏观上的数据对于判断IO到哪个文件上毫无帮助,这个时候block_dump的作用就显现出来了. 一.使用方法: 需要先停掉syslog功能,因为具体IO数据要通过printk输出,如果syslog存在,则会往message产生大量IO,干扰正

Linux IO 调度器

Linux IO Scheduler(Linux IO 调度器) 每个块设备或者块设备的分区,都对应有自身的请求队列(request_queue),而每个请求队列都可以选择一个I/O调度器来协调所递交的request.I/O调度器的基本目的是将请求按照它们对应在块设备上的扇区号进行排列,以减少磁头的移动,提高效率.每个设备的请求队列里的请求将按顺序被响应.实际上,除了这个队列,每个调度器自身都维护有不同数量的队列,用来对递交上来的request进行处理,而排在队列最前面的request将适时被移

linux IO诊断命令集

IO.sh ##iostat是查看磁盘活动统计情况 ##显示全部设备负载情况 r/s: 每秒完毕的读 I/O 设备次数.即 rio/s:w/s: 每秒完毕的写 I/O 设备次数.即 wio/s等 iostat ##每隔2秒刷新磁盘IO信息,而且每次显示3次 iostat 2 3 #显示某个磁盘的IO信息 iostat -d sda1 ##显示tty和cpu信息 iostat -t ##以M为单位显示磁盘IO信息 iostat -m ##查看TPS和吞吐量信息 kB_read/s:每秒从设备(dr

(转)linux IO 内核参数调优 之 参数调节和场景分析

1. pdflush刷新脏数据条件 (linux IO 内核参数调优 之 原理和参数介绍)上一章节讲述了IO内核调优介个重要参数参数. 总结可知cached中的脏数据满足如下几个条件中一个或者多个的时候就会被pdflush刷新到磁盘: (1)数据存在的时间超过了dirty_expire_centisecs(默认30s)时间 (2)脏数据所占内存 /(MemFree + Cached - Mapped) > dirty_background_ratio.也就是说当脏数据所占用的内存占(MemFre

Linux IO工具 iotop的替代品iopp

iotop无疑在linux IO检测上是个不错的工具,但苦于要求内核版本和Python版本,不少朋友放弃了,我也是.偶然间找到了iopp,用c写的,这个跟iotop是一个作用,nice!给大家分享下 安装方法很简单,首先复制下面源代码保存为iopp.c文件 #include <stdio.h> #include <sys/types.h> #include <dirent.h> #include <ctype.h> #include <sys/stat

linux io优化

场景:xml文件解析入库:并备份 问题:磁盘io异常,经常100%busy: linux io优化方法: 1.修改磁盘挂着参数,修改为writeback模式:对于文件读取频繁的可以设置noatime: 2.修改缓存写入磁盘时间 pdflush的行为受/proc/sys/vm中的参数的控制 /proc/sys/vm/dirty_writeback_centisecs (default 500): 1/100秒, 多长时间唤醒pdflush将缓存页数据写入硬盘.默认5秒唤醒2个(更多个)线程. 如果

Linux IO模式和select,poll,epoll解释

一些概念: 虚拟空间:是进程所看到的所有地址组成的空间.虚拟空间某个进程对所有分配给它的所有物理地址的重新映射. 寻址返回与计算机的位数有关系.分为内核空间与用户空间.针对32位的Linux系统,最高的1G字节为内核空间.最低的3G字节为用户空间. 进程阻塞:这是进程自身的一种主动行为.当进程进入阻塞状态的时候,不占用CPU资源. 文件描述符fd:非负整数,是一个索引值.指向内核为每一个进程所维护的该进程的打开文件记录表. 缓存IO:大多数文件系统的默认IO都是缓存IO.过程是:数据先被拷贝到操

文档-linux io模式及select,poll,epoll

文档-Linux IO模式详解 1. 概念说明 在进行解释之前,首先要说明几个概念:- 用户空间和内核空间- 进程切换- 进程的阻塞- 文件描述符- 缓存 I/O 1.1 用户空间与内核空间 现在操作系统都是采用虚拟存储器,那么对32位操作系统而言,它的寻址空间(虚拟存储空间)为4G(2的32次方).操作系统的核心是内核,独立于普通的应用程序,可以访问受保护的内存空间,也有访问底层硬件设备的所有权限.为了保证用户进程不能直接操作内核(kernel),保证内核的安全,操心系统将虚拟空间划分为两部分

Linux IO多路复用 poll

Linux IO多路复用 poll 之前曾经提到过 select poll 跟select类似,poll改进了select的一个确定,就是poll没有监听上限 不过poll还是需要遍历以及频繁的把数组拷贝到内核空间,在监听较多文件描述符的时候性能会下降 #include <poll.h> int poll(struct pollfd *fds, nfds_t nfds, int timeout); 传递的三个参数 fds:结构体数组 nfds:监听数量,(select 是最大文件描述符的值)