一.fileno()函数

C代码编写中 `fileno` 的作用 fileno函数在C语言编程中是一个非常重要的工具,它允许程序员将高级的文件I/O操作接口与底层的系统调用相结合,从而实现更精细的控制和更高的性能。通过了解fileno的作用和使用场景,程序员可以更加灵活地处理文件I/O操作,编写出更加高效和健壮的代码。 阅读详情
AI摘要

本文详细介绍了fileno()函数的功能及用法,用于获取文件流对应的文件描述符;并解析了ftruncate()函数,该函数用于改变文件大小。

一.fileno()函数

功    能:把文件流指针转换成文件描述符
相关函数:open, fopen
表头文件:#include <stdio.h>
定义函数:int fileno(FILE *stream)
函数说明:fileno()用来取得参数stream指定的文件流所使用的文件描述词
返回值  :返回和stream文件流对应的文件描述符。如果失败,返回-1。
范例:
#include <stdio.h>
main()
{
     FILE   *fp;
     int   fd;
     fp = fopen("/etc/passwd", "r");
     fd = fileno(fp);
     printf("fd = %d\n", fd);
     fclose(fp);
}

    文件描述词是Linux编程中的一个术语。当一个文件打开后,系统会分配一部分资源来保存该文件的信息,以后对文件的操作就可以直接引用该部分资源了。文件描述词可以认为是该部分资源的一个索引,在打开文件时返回。在使用fcntl函数对文件的一些属性进行设置时就需要一个文件描述词参数。
    以前知道,当程序执行时,就已经有三个文件流打开了,它们分别是标准输入stdin,标准输出stdout和标准错误输出stderr。和流式文件相对应的是,也有三个文件描述符被预先打开,它们分别是0,1,2,代表标准输入、标准输出和标准错误输出。
    需要指出的是,上面的流式文件输入、输出和文件描述符的输入输出方式不能混用,否则会造成混乱。


二. ftruncate()函数

函数功能:改变文件大小

相关函数:open、truncate
表头文件:#include <unistd.h>
函数原型:int ftruncate(int fd, off_t  length)
函数说明:ftruncate()会将参数fd指定的文件大小改为参数length指定的大小。参数fd为已打开的文件描述词,而且必须是以写入模式打开的文件。如果原来的文件件大小比参数length大,则超过的部分会被删去
返 回  值:0、-1
错误原因:errno
          EBADF     参数fd文件描述词为无效的或该文件已关闭
          EINVAL    参数fd为一socket并非文件,或是该文件并非以写入模式打开

使用方法:fd一般可以fileno(FILE *fp)获取,标示文件当前的大小,length则可由用户定义。此函数一般用在文件初始化或者重新为文件分配空间时。

注意事项:此函数并未实质性的向磁盘写入数据,只是分配了一定的空间供当前文件使用。当fd<length时,此时如果使用十六进制编辑工具打开该文件,你会发现文件末尾多了很多00,这就是执行这个函数后的效果。如果发生系统复位或者装置掉电以后,该函数所产生的作用将被文件系统忽略,也就是说它所分配的空间将不能被识别,文件的大小将会是最后一次写入操作的区域大小,而非ftruncate分配的空间大小,也就是说,文件大小有可能会被改变。

解决方法:可以在执行完ftruncate之后,在新空间的末尾写入一个或以上字节的数据(不为Ox00),这样新空间则不为空,文件系统会把这部分空间当成这个文件的私有空间处理,而不会出现文件大小改变的错误。

Python fileno方法的使用 fileno方法是Python文件对象的一个重要方法,用于获取文件对象关联的底层文件描述符。在这个示例中,我们使用open函数打开一个名为example.txt的文件,并将文件对象赋值给file_obj。然后,我们使用fileno方法获取文件描述符,并使用os模块中的write函数向文件中写入数据。最后,我们关闭文件。然后,我们使用fileno方法获取文件描述符,并使用os模块中的read函数读取文件中的数据。需要注意的是,使用fileno方法时要确保文件对象是有效的,即文件已经打开且未关闭。 阅读详情

相关推荐

《Linux系统调用:fileno,fdopen》

一、介绍 库函数: fileno(),fdopen(). 作用是混合使用库函数和系统函数调用进行文件的I/O操作。 #include <stdio.h> //将一个文件流中对应打开的文件描述符fd返回 int fileno(FILE *stream); 参数: stream: fopen之类的函数打开的文件流 返回值: 正确返回文件描述符fd,一般不会错误除非无效的...

yexiang优快云的专栏 510

fileno函数与ftruncate函数

fileno()函数功    能:把文件流指针转换成文件描述符相关函数:open, fopen表头文件:#include 定义函数:int fileno(FILE *stream)函数说明:fileno()用来取得参数stream指定的文件流所使用的文件描述词返回值  :返回和stream文件流对应的文件描述符。如果失败,返回-1。范例:#include main(){     FILE  

xiaoyangger的专栏 5299

解决AutoDock与Python版本冲突导致的内存泄漏问题:从BHtree *错误到环境配置优化

本文深入解析了AutoDock分子对接中常见的‘BHtree *’内存泄漏错误,其根源在于SWIG接口模块与Python运行环境的版本不匹配。文章提供了根治方案:通过构建Python 2.5.4与MGLTools 1.5.6的黄金兼容组合,并详细指导环境清理、安装配置及实战测试,从而彻底解决该内存泄漏问题,确保AutoDock工作流的稳定运行。

g5h6i的博客 1114

文件IO函数,文件目录操作函数

今天主要对zuot学习函数进行了补充。

LEE_C17的博客 1439

IEEE LaTeX模板中algorithm排版避坑指南:如何优雅地嵌入算法描述?

本文详细解析了在IEEE LaTeX模板中优雅排版algorithm的实用技巧,包括基础配置、高级自定义及常见问题解决方案。通过嵌套环境与[H]参数的应用,帮助研究者克服IEEEtran模板对算法排版的限制,实现专业且美观的算法呈现。

weixin_28340315的博客 408

SAP ABAP实战:如何用CVI_EI_INBOUND_MAIN批量更新BP邮箱(附完整代码)

本文深入解析了SAP ABAP中CVI_EI_INBOUND_MAIN函数在业务伙伴(BP)邮箱地址批量维护场景下的应用。通过详细讲解数据结构构建、关键参数(如任务参数'5')配置及完整代码示例,为开发者提供了一套高效、稳定的批量更新解决方案,并分享了性能优化与错误处理的最佳实践。

weixin_29228781的博客 77

《UNIXLinux程序设计教程》一3.5 fdopen()和fileno()函数

3.5 fdopen()和fileno()函数 文件描述字函数是流函数的初等函数,每一个流都与一个描述字相连。给定一个打开的文件描述字,可以用fdopen()函数为它创建一个流。反过来,已知一个流,也可以用fileno()函数得到它的文件描述字。 #include <stdio.h> FILE *fdopen (int filedes, c...

weixin_34194702的博客 124

Xilinx ERNIC RoCEv2 FPGA实现与QP队列深度解析

本文深入解析Xilinx ERNIC RoCEv2在FPGA上的实现,重点剖析QP队列对的管理机制与深度优化策略。通过Verilog代码示例和工程实战,详细介绍了如何实现高吞吐量、低延迟的RDMA硬件卸载方案,为金融交易和数据中心应用提供性能优化指导。

solidity8miner的博客 877

C语言文件指针和文件描述符相互转换

记录一下:文件指针向文件描述符转换的时候用fileno函数没问题,然而文件描述符向文件指针转换的时候却出现问题,大于2以上的值就出错。fdopen。 结果采用iob_func()函数却可以,暂时记录一下,后面有时间再探讨其中的原因。 char* s = "hello k7k!"; FILE* fp1 = fopen("x.txt", "w+"); fprintf(fp1, "%s\n",

Roykuang的专栏 1041

UniApp实现多端支付功能完整实现指南

支付业务流程多端支付实现安全性保障异常处理最佳实践支付基础知识多端支付实现统一支付封装安全性处理异常处理最佳实践根据具体业务场景选择合适的支付方式注重安全性和用户体验做好异常处理和日志记录持续优化和改进支付流程关注我,持续分享前端项目开发经验!

weixin_63454527的博客 2128

128x64 OLED屏的救星:手把手教你用纯C实现轻量级多级菜单

本文针对资源受限的单片机开发场景,提供了一套用纯C语言实现128x64 OLED屏轻量级多级菜单的完整方案。该方案摒弃了传统的树形指针结构,创新性地采用哈希表进行菜单项管理,核心代码不足200行,内存占用极低,逻辑清晰且易于维护。文章详细阐述了架构设计、实战演练及性能优化技巧,是STM32、ESP8266等小内存MCU项目的理想选择。

table的专栏 227

Linux下C++获取文件的大小和最近修改时间

Linux下获取文件的大小(byte)和最近修改时间(时间是指从公元1970年1月1日0时0分0 秒算起至今的UTC时间所经过的秒数)#include&lt;stdio.h&gt;#include &lt;sys/types.h&gt;#include &lt;sys/stat.h&gt;#include &lt;unistd.h&gt;int main(){    FILE * fp;    i...

肥尾鱼(嵌入式) 9771

第1章>>1.5:神电测控为什么开发LabVIEW ZYNQ FPGA软件工具包?(ZYNQ芯片的特点与优势)《LabVIEW ZYNQ FPGA宝典》

ZYNQ是赛灵思公司(Xilinx)推出的新一代全可编程片上系统(APSoC,All-Programmable SoC),它将处理器的软件可编程性与FPGA的硬件可编程性进行完美整合,以提供无与伦比的系统性能、灵活性与可扩展性。Zynq-7000系列是Xilinx于2010年4月推出的行业第一个可扩展处理平台,旨在为视频监视、汽车驾驶员辅助、工厂自动化、医疗器械等高端嵌入式应用提供所需的处理能力与计算性能。这款基于ARM处理器的SoC可满足复杂嵌入式系统的高性能、低功耗和多核处理能力等要求。

qq_40694786的博客 1647

fileno()函数

相关函数: open, fopen 表头文件:#include 定义函数: int fileno(FILE *stream) 函数说明:fileno()用来取得参数stream指定的文件流所使用的文件描述词 返回值   :返回文件描述词 范例: #include main() {     FILE  *fp;     int  fd;     fp = fopen("/e

mydear_33000的专栏 8411

科研生产力革命:手把手教你打造基于大模型的Research Agent(文献调研+论文写作+思路激发)

本文介绍了如何利用Research Agent(科研智能体)提升科研效率。Research Agent能自主完成文献检索、信息整合和报告生成全流程,省去50%以上的基础工作时间。文章详细讲解了搭建运行环境的方法,包括工具准备和MetaGPT配置,并提供了两种实战方案:基础版Search-O1和专业版MetaGPT Research Agent。此外,还介绍了如何为垂直领域定制Agent,以及优化检索效果、改善报告逻辑等技巧。最后列举了学术研究、行业分析、内容创作和个人学习四大应用场景,帮助用户将AI从聊天工

LXY_LOVE36的博客 267

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

open, read, write, lseek, fileno, fdopen函数的使用

成功返回读到的数据个数 | 失败返回 -1 读到文件结尾返回0。c.设备文件 ---- 文件IO ///dev/video0 ----> fopen();//从头到尾的偏移量 就是文件大小。在创立空洞文件时,少写一步ftell,“”相当于空字符串‘\0’,但是不能直接写 ‘\0’,因为需要的是地址。write(准备写进去的文件描述符,已有数据的地址buf,要写的字符个数)read(从哪里读的文件描述符,要存放的地址buf,要读的字节个数)

weixin_64031674的博客 1830

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

fileno函数

函数名称:fileno(在VC++6.0下为_fileno)   函数原型:int _fileno( FILE *stream );   函数功能:fileno()用来取得参数stream指定的文件流所使用的文件描述符   返回值:某个数据流的文件句柄   头文件:stdio.h   相关函数:open,fopen,fclose 程序示例   先看MSDN

Lce的专栏 2458

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

linux中fileno函数与ftruncate函数解析

linux中fileno函数与ftruncate函数解析 一.fileno()函数 功    能:把文件流指针转换成文件描述符 相关函数:open, fopen 表头文件:#include 定义函数:int fileno(FILE *stream) 函数说明:fileno()用来取得参数stream指定的文件流所使用的文件描述词 返回值  :返回和strea

chenglinhust的专栏 5182

STDIN_FILENO, STDOUT_FILENO, STDERR_FILENO类型为 int

stdin, stdout, stderr类型为 FILE* STDIN_FILENO, STDOUT_FILENO, STDERR_FILENO类型为 int 使用stdin的函数主要有:fread、fwrite、fclose等,是文件流方式。属于高级IO,带缓冲的。 使用STDIN_FILENO的函数有:read、write、close等, 属于低级IO,要自己处理缓冲。

天天的优快云 5231

C函数_fileno了解

int _fileno(FILE *stream );  ----->Gets the file descriptor associated with a stream.(用来取得参数stream指定的文件流所使用的文件描述符) #include 返回值:某个数据流的文件句柄 DEMO:MSDN上的例子 #include #include int main() { printf("T

hgj125073的专栏 3373

linux fileno函数

函数fopen()就是返回打开文件的指针。其实文件描述符和文件指针是可以互相转换的。这要通过fdopen和fileno两个函数实现。它们都包含在头文件stdio.h中。先看fdopen的原型: FILE * fdopen(int filedes, const char *opentype); 第一个参数filedes是一个打开的文件描述符,opentype是表示打开方式的字符串,和fopen函

lianliange85的专栏 6442

linux fileno函数,fileno函数与ftruncate函数

fileno()函数功 能:把文件流指针转换成文件描述符相关函数:open, fopen表头文件:#include 定义函数:int fileno(FILE *stream)函数说明:fileno()用来取得参数stream指定的文件流所使用的文件描述词返回值 :返回和stream文件流对应的文件描述符。如果失败,返回-1。范例:#include main(){FILE *fp;int...

weixin_34981046的博客 903

函数fileno的学习

fileno()  表头文件:#include stdio.h>  定义函数: int fileno(FILE *stream)  函数说明:fileno()用来取得参数stream指定的文件流所使用的文件描述符  返回值 :返回文件描述符  范例:  #include   main()  {  FILE *fp;  int fd;  fp = fope

xiaoxi2xin的专栏 1457

file.fileno_带有示例的Python File fileno()方法

file.fileno 文件fileno()方法 (File fileno() Method) fileno() method is an inbuilt method in Python, it is used to get the file number i.e. the file descriptor as an integer of the stream. It may return an...

cumubi7552的博客 683
上一篇: fstat函数及struct stat结构
下一篇: 【linux】free命令中cached和buffers的区别
TuxedoLinux
博客等级 码龄9年 268粉丝 34原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值