Linux 文件编程 read函数

article/2025/10/24 16:02:58

read函数的功能是向以打开的文件读取数据。

read函数需要包含头文件 :#include <unistd.h>。

read函数的原型为:

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

其中,fd为文件描述符;buf表示读出数据缓冲区地址;count表示读出的字节数。

返回值:若读取成功,则返回读到的字节数;若失败,返回-1;若已达到文件尾,则返回0。因此读到的字节数可能小于count的值。 

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>int main()
{int fd;char *buf = "luyi is handsome!!";fd = open("./file1",O_RDWR);printf("fd = %d\n",fd);if(fd == -1){printf("open file1 fail!!\n");fd = open("./file1",O_RDWR|O_CREAT,0600);if(fd > 0){printf("create file1 success!!!\n");}else if(fd == -1){printf("creat file1 success!!\n");}}else{printf("open file1 success!!!\n");}int n_write = write(fd,buf,strlen(buf));if(n_write != -1){printf("write %d byte to file1\n",n_write);}else{printf("write fail!!!\n");}char *readBuf;readBuf = (char*)malloc(sizeof(char)*n_write);close(fd);open("./file1",O_RDWR);//ssize_t read(int fd, void *buf, size_t count);int n_read = read(fd,readBuf,n_write);printf("n_read = %d,context = %s\n",n_read,readBuf);close(fd);return 0;
}

在这个程序中,在调用read函数之前,先调用了close函数和open函数,这是为了让光标移到文件的头,否则将读取失败。因此,就还需要用到lseek函数来移动文件中光标的位置。

通过调用lseek函数可以改变光标的位置,其函数原型为

off_t lseek(int fd, off_t offset, int whence);

其中,fd为文件描述符;offset指的是每一次读写操作所需移动距离,以字节为单位 ,可正可负,正值表示想文件尾部移动,负值表示向文件头部移动。whence表示当前位置的基点,主要有以下三个基点符号常量。

SEEK_SEK:将光标移到距离文件头出offset个字节;

SEEK_CUR:将光标移到当前位置前后offset个字节;

SEEK_END:将光标移到文件末尾前后offset个字节。

例如:

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>int main()
{int fd;char *buf = "luyi is handsome!!";fd = open("./file1",O_RDWR);printf("fd = %d\n",fd);if(fd == -1){printf("open file1 fail!!\n");fd = open("./file1",O_RDWR|O_CREAT,0600);if(fd > 0){printf("create file1 success!!!\n");}else if(fd == -1){printf("creat file1 success!!\n");}}else{printf("open file1 success!!!\n");}int n_write = write(fd,buf,strlen(buf));if(n_write != -1){printf("write %d byte to file1\n",n_write);}else{printf("write fail!!!\n");}char *readBuf;readBuf = (char*)malloc(sizeof(char)*n_write);
//	close(fd);
//	open("./file1",O_RDWR);
//	off_t lseek(int fd, off_t offset, int whence);
//	lseek(fd,0,SEEK_SET);
//	lseek(fd,-1*n_write,SEEK_CUR);lseek(fd,-1*n_write,SEEK_END);
//	ssize_t read(int fd, void *buf, size_t count);int n_read = read(fd,readBuf,n_write);printf("n_read = %d,context = %s\n",n_read,readBuf);close(fd);return 0;
}

除此之外,lseek函数还可以用来计算文件大小,因为他的返回值是以字节为单位,从文件的起始点开始计算到当前位置的字节数。

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>int main()
{int fd;char *file = "lubenwei is very niubi!!!";fd = open("./file",O_RDWR);printf("fd1 = %d\n",fd);write(fd,file,strlen(file));fd = open("./file",O_RDWR);int size_of_file = lseek(fd,0,SEEK_END);printf("size_of_file = %d\n",size_of_file);close(fd);putchar('\n');return 0;
}

 

 

 


http://chatgpt.dhexx.cn/article/nN3xCOmS.shtml

相关文章

c语言read有什么作用,c语言read函数读到什么结束

linux下c语言编程read()函数的问题 返回-1的时候&#xff0c;要根据错误码来判断原因&#xff0c;请看下面的函数说明&#xff1a; 表头文件 #include 定义函数 ssize_t read(int fd,void * buf ,size_t count); 函数说明 read()会把参数fd 所指的文件传送count个字节到buf指针…

深入了解C read/write函数和cat命令实现

1&#xff0e;文件描述符 文件描述符&#xff08;file descriptor&#xff09;通常是一个小的非负整数&#xff0c;内核用以 标识一个特定进程正在访问的文件。当内核打开一个现有文件或创建一 个新文件时&#xff0c;它都返回一个文件描述符。在读、写文件时&#xff0c;可以使…

极路由最新刷机教程

本文参考&#xff1a;点击打开链接 前提条件 极路由1s、2、3、4&#xff0c;新老版本都可以&#xff0c;固件版本要求9006~9018。但实际上9019以及最新的1.0.xxx也都支持&#xff0c;只不过必须使用ss插件直达页面去操作ss&#xff0c;ss功能完美&#xff0c;就是界面有点简陋。…

极路由(极壹S)HC5661安装OpenWrt及救砖过程

极路由(极壹S)HC5661安装OpenWrt及救砖过程 文章目录 极路由(极壹S)HC5661安装OpenWrt及救砖过程1.免插件离线Root1.1 点击 获取local_token1.2 点击 获取uuid1.3 获取cloud token1.4 开启ssh1.5 永久开启ssh 2.刷不死uboot(breed)2.1 核对路由器型号2.2 下载breed固件2.3 刷入…

ssh登录极路由后台_OpenWrt刷机详细流程(极路由)

要想深入理解某个软件,首先熟悉其安装步骤,亲自感受软件的强大。OpenWrt是Linux的一个发行版,是一个独立的操作系统,主要运行在嵌入式设备中,由于嵌入式硬件种类繁多,并且稍微不慎就可能导致板子变砖,这给开发者带来了很大麻烦。 本篇文章以极路由为例,详细记录了OpenW…

浙大玉泉校区路由器L2TP设置(极路由1s)

我的宿舍里的ZJUWLAN信号太不稳定了&#xff0c;所以打算用有线。房间里只有一个有线口&#xff0c;还离的很远&#xff0c;所以打算连个路由器&#xff0c;然后用wifi连接。 步骤如下&#xff1a; 申请IP 浙江大学学生公寓服务网&#xff1a; http://service.chinasinew.co…

极路由云平台倒闭,路由器免插件离线ROOT方法

极路由云平台停服&#xff0c;离线root方法 免插件离线ROOT方法 访问&#xff1a;http://www.hiwifi.wtf/ 步骤 1. 点击 获取local_token 注意该网页不要关闭&#xff0c;后续获得 cloud token&#xff0c;填入并提交&#xff0c;即可临时获得ssh权限 即&#xff1a;http…

极路由1s HC5661 编程器救砖教程

说明&#xff1a;极1s如果刷错了固件&#xff0c;比如刷了HC5661A之类的&#xff0c;那么&#xff0c;会出现亮不灯的死机情况&#xff0c;这个时候说明固件引导已经刷坏了&#xff0c;只能拆机用编程器救砖或者返厂维修。如果采用编程器的话&#xff0c;因为没有备份&#xff…

极路由器1S,HC5661A刷breed再刷老毛子华硕

极路由器1S-HC5661A刷breed再刷华硕老毛子&#xff0c;再次编辑补充HC5661不带A的教程 特别提醒&#xff1a; 本教程是教授大家如何对【极路由器1S&#xff0c;HC5661A】以及【hc5661不带A的】进行刷机&#xff0c;载入breed并刷入华硕老毛子固件&#xff08;以下简称老毛子&a…

更新极路由器1S,HC5661A刷breed再刷老毛子华硕教程

更新极路由器1S-HC5661A刷breed再刷老毛子老毛子教程&#xff0c;再次编辑附加HC5661不带A的 特别提醒&#xff1a; 2021年1月1日起&#xff0c;极路由器官网www.hiwifi.com域名到期&#xff0c;云平台正式关闭&#xff0c;之前我发布的极1S刷机教程是基于云平台获取root权限的…

极路由刷个人编译的openwrt固件全过程

说明 以下是极1s刷机的整个流程&#xff0c;包括openwrt 极路由固件的编译和升级流程&#xff0c;主要是为了方便发烧友或者开发人员。 准备工作 极壹S(型号HC5661)一台 串口板和串口线(如果是高级玩家) 电脑、网线等软件(vmware、tftpd、linux编译环境) 网络配置 极路由为…

极1s刷Padavan改华硕[N14U N54U]固件

打开极路由的开发者模式 打开开发者模式 登陆极路由的后台管理界面&#xff0c;点击云插件&#xff0c;进入到极路由云插件管理后点击路由信息&#xff0c;然后在最下面点击开通开发者模式&#xff0c;这里需要你放弃极路由的保修以及安装APP等一系列的工作&#xff0c;大家照…

在极路由极1S上使用entware

目录 打开ssh功能安装entware使用感想备份和还原entware注意程序开启启动参考文章 本想在极1S上安装些程序&#xff0c;结果登录ssh后发现系统自带的opkg有限制&#xff0c;即使更改为openWRT的源也不能安装&#xff0c;说各种不兼容。于是打算装entware。 entware是面向 Linux…

Drcom下如何使用路由器上校园网并开启WIFI(以广东工业大学、极路由1S HC5661A为例)

免责声明&#xff1a; 在根据本教程进行实际操作时&#xff0c;如因您操作失误导致出现的一切意外&#xff0c;包括但不限于路由器变砖、故障、数据丢失等情况&#xff0c;概不负责&#xff1b;该技术仅供学习交流&#xff0c;请勿将此技术应用于任何商业行为&#xff0c;所产生…

极路由1S HC5661A 刷入不死u-boot(breed)加刷潘多拉固件教程

原文来自&#xff1a;新版极路由1S&#xff08;HC5661A&#xff09;刷潘多拉加SS配置教程 不死uboot(breed)如何使用 下文是以原文为基础&#xff0c;更详细也更适合小白的整合版。 注意&#xff1a;本贴是新版的白盒极路由1S&#xff08;HC5661A&#xff09;教程&#xff…

极路由s1有wds_极路由1、1s等机型刷OpenWrt--成为真正的极客

0x00&#xff1a;我为什么买极路由 买极路由的时候&#xff0c;他们说这是个给极客打造的智能路由&#xff0c;一开始还因为国际版&#xff0c;被gov直接请去喝茶了。 当时觉得&#xff0c;这玩意能给APPStore加速&#xff0c;还能屏蔽广告&#xff0c;简直NB。那时候也没啥钱&…

极路由1S 开启临时ssh 并刷breed成功

手上有一台别人给的 极路由1s&#xff0c;刷的是不知名版本的openwrt版本&#xff0c;也无法远程ssh&#xff0c;也就无法刷新的固件玩玩。 以前没接触过软路由和路由系统&#xff0c;找了很多资料&#xff0c;都没法正常获取ssh权限。 折腾了一两天&#xff0c;结果发现我刷的…

极路由 刷linux,记一次 极路由1S HC5661 TTL root 刷 U-BOOT 不死固件 及 爱快固件-20200320更新...

18.png (15.32 KB, 下载次数: 8) 2016-7-14 16:55 上传 2、用PUTTY的SSH类型登陆192.168.199.1,端口号:22。login as输入root,password输入admin。 备份原厂固件,需要插入SD卡(不需要刷回原厂固件的就直接略过吧):root@Hiwifi:/#cat/proc/mtd #列出路由器分区情况m…

极路由 刷linux,极路由1s刷openwrt不完全教程

极路由是基于openwrt做的二次开发。cpu是mtk7620a属于mips架构。 如果对svn和编译比较熟悉的话&#xff0c;可以获取官方的源码&#xff0c;自行编译。 如果对这些一窍不通的话&#xff0c;建议安装我下面提供的教程一步步操作。 1&#xff0c;首先看你的极路由版本。如果是开发…

极路由1S刷openwrt

文章目录 准备材料刷机流程 准备材料 breed下载,选择5661a的 https://breed.hackpascal.net/ openwrt固件 选择76x8版本的openwrt固件 https://downloads.openwrt.org/releases/21.02.0-rc3/targets/ramips/mt76x8/ 刷机流程 进入极路由1s root模式 解锁root可参考链接&…