当前位置: 首页 > news >正文

read和write函数

读函数read  
ssize_t read(int fd,void *buf,size_t nbyte) 
read函数是负责从fd中读取内容. 成功时,read返回实际所读的字节数,假设返回的值是0,表示已经读到文件的结束了.
小于0表示出现了错误. 假设错误为EINTR说明读是由中断引起的,  假设是ECONNREST表示网络连接出了问题.
写函数write  
ssize_t write(int fd,const void *buf,size_t nbytes) 
write函数将buf中的nbytes字节内容写入文件描写叙述符fd.成功时返回写的字节数.失败时返回-1. 并设置errno变量. 在网络程序中,当我们向套接字文件描写叙述符写时有俩种可能.  
1)write的返回值大于0,表示写了部分或者是所有的数据.  
2)返回的值小于0,此时出现了错误.我们要依据错误类型来处理.  假设错误为EINTR表示在写的时候出现了中断错误.  
假设为EPIPE表示网络连接出现了问题(对方已经关闭了连接).









 Linux-read函数 收藏
 

read函数(读取文件)

read函数能够读取文件。读取文件指从某一个已打开地文件里,读取一定数量地字符,然后将这些读取的字符放入某一个预存的缓冲区内,供以后使用。

使用格式例如以下:

number = read( ...

read函数(读取文件)

read函数能够读取文件。读取文件指从某一个已打开地文件里,读取一定数量地字符,然后将这些读取的字符放入某一个预存的缓冲区内,供以后使用。

使用格式例如以下:

number = read(handle, buffer ,n) ;

上述read调用函数中,各个參数的定义例如以下:

handle: 这是一个已经打开的文件句柄,表示从这个文件句柄所代表的文件读取数据。

buffer: 指缓冲区,即读取的数据会被放到这个缓冲区中去。

n: 表示调用一次read操作,应该读多少数量的字符。

number:表示系统实际所读取的字符数量。

如果某个文件的长度是600字符,而n的值是512,则在第1次调用读这个文件时,系统能够正常地读取512个字符地内容,并将这些字符数量传给number变量,因此number的值将变为88。要第2次读取这个文件时,由于文件已经没有内容可供读取了,此时系统会返回0给number。另外,如果读取文件失败,系统将返回-1给number。

比方一个有100个字节的文件,第一次读取10个字节,这时读取指针在第10个字节处。再次进行10个字节的读操作时,会接着第一次读的位置接着往后读。假设还想从開始读,可使用lseek函数定位。

Code:

#include "lyl.h"

#define BUF 512

main()

{

static char filename[]="t1.txt" ;

char buffer[BUF] ;

int handle ;

int i ;

int total = 0 ;

handle = open(filename,O_RDONLY) ;

if ( handle == -1 )

{

printf("[%s] create fail !!!!

",filename) ;

exit(1) ;

}

else

{

while( (i = read(handle,buffer,BUF) ) > 0 )

total =i ;

}

printf("The total character in 《%s》 is %d

",filename,total ) ;

exit(0) ;

}

程序运行结果:

The total character in 《t1.txt》 is 11

$cat t1.txt

1234567890

 

 

【 read系统调用】  
   
功能描写叙述:
从文件读取数据。
 
使用方法: 
#include <unistd.h>

ssize_t read(int fd, void *buf, size_t count);


參数:  
fd: 将要读取数据的文件描写叙述词。
buf:  所读取到的数据的内存缓冲。
count: 须要读取的数据量。
   
返回说明:  
成功运行时,返回所读取的数据量。失败返回-1,errno被设为下面的某个值  
EAGAIN:打开文件时设定了O_NONBLOCK标志,而且当前没有数据可读取
EBADF:文件描写叙述词无效,或者文件不可读
EFAULT:參数buf指向的空间不可訪问
EINTR:数据读取前,操作被信号中断
EINVAL:一个或者多个參数无效
EIO:读写出错
EISDIR:參数fd索引的时文件夹


 备注:

从串口读数据,仅仅读一次,数据没有读全。增加while后,则数据读全了。

total_read_bytes=0;

while(read_bytes=read(fd_485,buffer1,256)>0)

{

memcpy(buffer2+total_read_bytes,buffer1,read_bytes);

total_read_bytes+=read_bytes;

}

for(i=0;i<total_read_bytes;i++)

printf("0x%02lx\n",buffer2[i]);


相关文章:

  • mysql数据库开发规范
  • iOS开发UI篇—字典转模型
  • 金蝶kis记账王云盘版怎么安装与注册
  • cocos2d-x中Node中重要的属性
  • Linux磁盘知识,分区与文件系统
  • mysql-5.5.36.tar.gz 在rhel 6.5上的编译安装
  • Lintcode--008(编辑距离)
  • 安全狗服云iphone版 轻松管理服务器安全
  • Ajax来实现下拉框省市区三级联动效果(服务端基于express)
  • 登陆界面不输密码点一次登陆出现一个用户名和密码不能为空(点n个出现n个)...
  • 适合程序员的个人综合意外险,最高可保100万
  • 工业无线网络标准初步了解
  • 利用KVO监视一个view的frame
  • 操作系统的主要功能
  • ubuntu server 安装 mantis bug tracker 中文配置
  • 【剑指offer】让抽象问题具体化
  • avalon2.2的VM生成过程
  • Bootstrap JS插件Alert源码分析
  • CSS3 变换
  • Git的一些常用操作
  • HTML-表单
  • JS基础之数据类型、对象、原型、原型链、继承
  • js继承的实现方法
  • Kibana配置logstash,报表一体化
  • LeetCode18.四数之和 JavaScript
  • log4j2输出到kafka
  • Lucene解析 - 基本概念
  • React 快速上手 - 07 前端路由 react-router
  • React-Native - 收藏集 - 掘金
  • 第13期 DApp 榜单 :来,吃我这波安利
  • 观察者模式实现非直接耦合
  • 理清楚Vue的结构
  • 数据科学 第 3 章 11 字符串处理
  • 学习使用ExpressJS 4.0中的新Router
  • 最近的计划
  • linux 淘宝开源监控工具tsar
  • Unity3D - 异步加载游戏场景与异步加载游戏资源进度条 ...
  • 如何在招聘中考核.NET架构师
  • #LLM入门|Prompt#1.8_聊天机器人_Chatbot
  • #NOIP 2014# day.1 T2 联合权值
  • #NOIP 2014# day.1 T3 飞扬的小鸟 bird
  • #使用清华镜像源 安装/更新 指定版本tensorflow
  • #我与Java虚拟机的故事#连载15:完整阅读的第一本技术书籍
  • $().each和$.each的区别
  • (webRTC、RecordRTC):navigator.mediaDevices undefined
  • (二)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (九)One-Wire总线-DS18B20
  • (算法)Travel Information Center
  • (学习日记)2024.03.25:UCOSIII第二十二节:系统启动流程详解
  • (一)C语言之入门:使用Visual Studio Community 2022运行hello world
  • (转)es进行聚合操作时提示Fielddata is disabled on text fields by default
  • (转)memcache、redis缓存
  • *** 2003
  • .libPaths()设置包加载目录
  • .NET Core 将实体类转换为 SQL(ORM 映射)