十一、文件和目录——文件操作函数(续)

11.3 truncate 和  ftruncate 函数 --- 文件截短函数

11.3.1 函数介绍

  改变文件大小的函数

  相关函数 open

1 #include <unistd.h>
2 int truncate(const char * path, off_t length);
3 int ftruncate(int fd, off_t length);
  • 函数说明

    • 在文件尾端处截去一些数据以缩短文件
    • 将一个文件的长度截短为 0 是一个特例,用 O_TRUNC 标志可以做到这一点
    • 如果该文件以前的长度大于 length,则超过 length 以外的数据就不再能存取。如果以前的长度短于 length,则其后果与系统有关
    • truncate()会将参数 path 指定的文件大小改为参数 length 指定的大小。如果原来的文件大小比参数 length 大,则超过的部分会被删去。
    • ftruncate()会将参数 fd 指定的文件大小改为参数 length 指定的大小。参数 fd 为已打开的文件描述词,而且必须是以写入模式打开的文件。如果原来的文件大小比参数 length 大,则超过的部分会被删去。
  • 参数:
    • @ length:文件截短后的长度
  • 返回值
    • 执行成功则返回0,失败返回 -1 ,错误原因存于 errno。
  • 错误代码
    • EACCESS 参数path所指定的文件无法存取。
    • EBADF 参数fd文件描述词为无效的或该文件已关闭。(ftruncate)
    • EROFS 欲写入的文件存在于只读文件系统内
    • EFAULT 参数path指针超出可存取内存空间
    • EINVAL 参数path包含不合法字符
    • ENAMETOOLONG 参数path太长
    • ENOTDIR 参数path路径并非一目录
    • EINVAL 参数fd 为一socket 并非文件,或是该文件并非以写入模式打开。(ftruncate)
    • EISDIR 参数path 指向一目录
    • ETXTBUSY 参数path所指的文件为共享程序,而且正被执行中
    • ELOOP 参数path’有过多符号连接问题
    • EIO I/O 存取错误。

11.3.2 例子

  file_truncate.c

 1 #include <unistd.h>
 2 #include <fcntl.h>
 3 #include <stdio.h>
 4 #include <stdlib.h>
 5 #include <errno.h>
 6
 7 int main(int argc, char *argv[])
 8 {
 9     if(argc < 3)
10     {
11         fprintf(stderr, "usage: %s file length\n", argv[0]);
12         exit(1);
13     }
14
15     //判断文件是否有写的权限
16     if(access(argv[1], W_OK) < 0) {
17         perror("write permission error");
18         exit(1);
19     }
20
21     //将文件截短为传入的长度
22     if(truncate(argv[1], atoi(argv[2])) < 0) {
23         perror("truncate error");
24         exit(1);
25     }
26
27     //查看文件长度
28     int fd = open(argv[1], O_RDONLY);
29     if(fd < 0) {
30         perror("open error");
31         exit(1);
32     }
33
34     long len = lseek(fd, 0L, SEEK_END);
35     printf("file length: %ld\n", len);
36     close(fd);
37
38     return 0;
39 }

  编译运行:

  

原文地址:https://www.cnblogs.com/kele-dad/p/9062249.html

时间: 2024-07-30 19:16:07

十一、文件和目录——文件操作函数(续)的相关文章

常用的文件文件夹目录的操作函数

BuildPath() 生成一个文件路径 CopyFile() 复制文件 CopyFolder() 复制目录 CreateFolder() 创建新目录 CreateTextFile() 生成一个文件 DeleteFile() 删除一个文件 DeleteFolder() 删除一个目录 DriveExists() 检验盘符是否存在 Drives 返回盘符的集合 FileExists() 检验文件是否存在 FolderExists 检验一个目录是否存在 GetAbsolutePathName() 取得

python 文件与目录的操作 &nbsp; 未完善 需要重新学习

文件与目录的操作:    -文件读写:python进行文件读写的函数是open或file file_handler = open(filename,mode) mode, 模式 说明 r 只读 r+ 读写 w 写入,先删除原文件,在重新写入,如果文件没有则 创建 w+ 读写,先删除原文件,在重新写入,如果文件没有则创建(可以写入输出) 读范例: >>> fo  = open('/tools/123/test.log')                                   

python—— 文件的打开模式和文件对象方法 &amp; os、os.path 模块中关于文件、目录常用的函数使用方法

引用自"鱼c工作室"     文件的打开模式和文件对象方法  : https://fishc.com.cn/forum.php?mod=viewthread&tid=45279&extra=page%3D1%26filter%3Dtypeid%26typeid%3D403 os.os.path 模块中关于文件.目录常用的函数使用方法: https://fishc.com.cn/forum.php?mod=viewthread&tid=45512&extr

Linux下的目录扫描操作函数使用实践

[文章摘要] 本文以实际的C源程序为例子,介绍了Linux下的目录扫描函数(scandir)的使用方法,为相关开发工作的开展提供了有益的参考. [关键词] C语言  Linux  目录扫描  makefile  scandir 一.scandir命令简介 scandir函数的声明为: int scandir(const char *dir, structdirent ***namelist, int (*filter) (const void *b), int ( * compare )( co

文件及目录相关操作

PHP创建文件(夹)以及目录操作 一.目录操作         首先是从目录读取的函数,opendir(),readdir(),closedir(),使用的时候是先打开文件句柄,而后迭代列出: <?php$base_dir="filelist/"; //打开目录 $fso=opendir($base_dir);echo  $base_dir."<hr/>";while($flist=readdir($fso)){//文件列表 echo $flist

nodejs中文件,目录的操作(1)

首先,我们对fs文件系统分为两类操作,第一类是xxx方法,第二类是xxxSync方法.所有的fs操作几乎都是这两类,第一类是异步回调,第二类是同步等待. A.对于文件的读写操作 a.完整性读写 1.fs.readFile(filename,[options],callback)//可以用来完整读取一个整的文件. 2.fs.writeFile(filename,data,[options],callback)//写入文件的数据 3.fs.appendFile(filename,data,[opti

Perl文件、目录常用操作

注意,这些操作的对象是文件名(相对路径/绝对路径),而非文件/目录句柄,句柄只是perl和文件系统中文件的关联通道,而非实体对象. 创建文件 在unix类操作系统中有一个touch命令可以非常方便的创建文件,还能批量创建一些名称规律的文件.但实际上touch的主要介绍中却是"修改文件时间戳",创建文件只不过是它的辅助能力.如果没有touch命令,如何在shell环境下创建文件?最佳方式是通过重定向的方式. 在perl中没有touch类似的功能,所以原始地只能通过open打开输出类的文件

os :文件和目录的操作

文件操作 os.path.exists(path):这个函数用于检查文件或目录path是否存在,返回一个布尔值 os.path.isfile(path):这个函数用于判断参数path是否是文件(而不是目录)copy os.path.isdir(path):这个函数用于判断参数是否是目录(而不是文件) shutil.copy(src.dst):这个函数用于将文件或目录(src)移动到另外一个位置(dst) os.path.abspath(path):这个函数将返回绝对路径名 os.remove(p

在Python中对文件和目录进行操作

文件与目录操作是编程语言中非常重要的功能,Python也对其提供了相应的API支持,这篇博文就是具体介绍它们的使用方法. 一.文件打开和关闭操作 对文件进行操作在Python中分为3个步骤,首先要打开文件,然后是对文件进行读写操作,最后需要关闭文件. 1.打开文件使用的是open()函数,它提供初始化输入.输出(I/O)操作的通用接口,成功打开文件后返回一个文件对象,打开失败则引发一个错误.打开文件的语法如下: file_object = open(file_name,access_mode [

(15) PHP 随笔---LAMP Linux基本操作 对文件、目录的操作

◇对目录的操作: ◇创建目录: mkdir Xmu //在当前目录下创建一个名为Xmu的目录 ◇创建多个级别目录关系: mkdir -p newdir/newdir/newdir //在当前目录下创建多个连续目录,-p的意思是以递归的方式 ◇移动目录(也可以针对文件操作): mv dir1 dir2 //把dir1移动到dir2目录下 mv dir1/dir2 dir3 //把dir2移动到dir3目录下 mv dir1/dir2 dir3/dir4 //把dir2移动到dir4目录下 ◇改目录