本文主要是介绍c语言文件清空truncate ftruncate函数,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
truncate ftruncate函数
truncate()和ftruncate()都可以用来修改文件大小,但两者之间也有一些区别。
一、truncate()函数
头文件:
#include <unistd.h>
函数定义:
int truncate(const char *path, off_t length);
函数调用:
truncate("./test.txt", 500);
函数说明:
truncate()会将参数path指定的文件大小改为参数length指定的大小。 如果原来的文件大小比参数length大,则超过的部分会被删除(如需清空文件,length设置为0)
返回值:
执行成功则返回0, 失败返回-1, 错误原因存于errno
错误代码:
1 EACCESS 参数path所指定的文件无法存取
2 EROFS 欲写入的文件存在于只读文件系统内
3 EFAULT 参数path指针超出可存取空间
4 EINVAL 参数path包含不合法字符
5 ENAMETOOLONG 参数path太长
6 ENOTDIR 参数path路径并非一目录
7 EISDIR 参数path指向一目录
8 ETXTBUSY 参数path所指的文件为共享程序,而且正被执行中
9 ELOOP 参数path 有过多符号连接问题。
10 EIO I/O存取错误
二、ftruncate()函数
头文件:
#include<unistd.h>
函数定义:
int ftruncate(int fd,off_t length);
函数调用:
1 out = open("./test.txt", O_RDWR | O_CREAT, S_IRUSR);
2 ftruncate(out, 500);
3 close(out);
函数说明:
ftruncate()会将参数fd指定的文件大小改为参数length指定的大小。
参数fd为已打开的文件描述词,而且必须是以写入模式打开的文件。
如果原来的文件大小比参数length大,则超过的部分会被删去。(如需清空文件,length设置为0)
返回值:
执行成功则返回0,失败返回-1,错误原因存于errno。
错误代码:
1 EBADF 参数fd文件描述词为无效的或该文件已关闭。
2 EINVAL 参数fd 为一socket 并非文件,或是该文件并非以写入模式打开。
三、例如
int fd;
const char *s1 = "0123456789";
const char *s2 = "abcde";
fd = open("test.txt", O_CREAT | O_WRONLY | O_TRUNC, 0666);
write(fd, s1, strlen(s1));ftruncate(fd, 0);
lseek(fd, 0, SEEK_SET);write(fd, s2, strlen(s2));
close(fd);
return 0;//先清空文件,再设置文件偏移量,否则会产生文件空洞
ftruncate(fd, 0);
lseek(fd, 0, SEEK_SET);
这篇关于c语言文件清空truncate ftruncate函数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!