linux中fileno函数与ftruncate函数解析
来源:互联网 发布:郑州商中科技网络公 编辑:程序博客网 时间:2024/05/14 03:11
功 能:把文件流指针转换成文件描述符
相关函数: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,代表标准输入、标准输出和标准错误输出。
需要指出的是,上面的流式文件输入、输出和文件描述符的输入输出方式不能混用,否则会造成混乱。
函数功能:改变文件大小
相关函数: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),这样新空间则不为空,文件系统会把这部分空间当成这个文件的私有空间处理,而不会出现文件大小改变的错误。
- linux中fileno函数与ftruncate函数解析
- fileno函数与ftruncate函数
- fileno函数与ftruncate函数
- fileno函数与ftruncate函数
- fileno函数与ftruncate函数
- Linux ftruncate函数
- linux fileno函数
- ftruncate函数
- ftruncate()函数
- ftruncate函数
- ftruncate函数
- ftruncate函数
- fileno()函数
- fileno函数
- fileno()函数
- fileno函数
- truncate函数和ftruncate修改文件大小-linux
- ftruncate() 函数解释
- grub4dos引导Win7和linux双系统
- ACM Steps_Chapter Two_Section1
- 对于内向、不善于社交的人来说,如何建立人脉?
- 项目成功的⑤大因素
- cocos2d-x中 在init函数中去取 visibleSize和 visibleOriginPoint
- linux中fileno函数与ftruncate函数解析
- activity之间的数据传递
- linux 内核简介
- latex设置页边距和页眉页脚
- Java中static、final用法
- 手工检测jsp站注入点常用语句
- Eclipse快捷键大全
- cocos2d-x中CCEditBox 在iOS和安卓平台下 位置偏移的问题解决方法
- 云计算学习笔记---异常处理---hadoop问题处理ERROR org.apache.hadoop.hdfs.server.datanode.DataNode: java.lang.NullPoin