个简短的C语言代码,用于删除二进制文件末尾的所有0,不使用ftruncate函数
时间: 2024-05-14 10:19:12 浏览: 147
以下是一个简短的C语言代码,用于删除二进制文件末尾的所有0,不使用ftruncate函数:
```c
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
int main(int argc, char *argv[]) {
if (argc != 2) {
printf("Usage: %s <filename>\n", argv[0]);
return 1;
}
int fd = open(argv[1], O_RDWR);
if (fd < 0) {
printf("Error opening file %s\n", argv[1]);
return 1;
}
off_t size = lseek(fd, 0, SEEK_END);
if (size < 0) {
printf("Error getting file size\n");
close(fd);
return 1;
}
unsigned char buf;
off_t pos = size - 1;
int found = 0;
while (pos >= 0) {
if (lseek(fd, pos, SEEK_SET) < 0 || read(fd, &buf, 1) < 0) {
printf("Error reading file\n");
close(fd);
return 1;
}
if (buf == 0) {
found = 1;
} else if (found) {
if (lseek(fd, pos + 1, SEEK_SET) < 0) {
printf("Error seeking file\n");
close(fd);
return 1;
}
if (ftruncate(fd, pos + 1) < 0) {
printf("Error truncating file\n");
close(fd);
return 1;
}
break;
}
pos--;
}
close(fd);
return 0;
}
```
这个代码使用lseek函数获取文件大小,并从文件末尾开始搜索,直到找到一个非零字节。然后使用ftruncate函数截断文件,以删除所有末尾的零字节。如果ftruncate函数不可用,也可以使用lseek函数和write函数重新定位到最后一个非零字节并写入一个null字节以截断文件。
阅读全文