【发布时间】:2016-10-11 03:16:59
【问题描述】:
我正在尝试制作一个 C 程序,通过使用 ftruncate 截断或扩展输入文件,将输入文件的大小更改为所需大小。它还必须使用命令行参数。
例如,以下是有效输入:
./changefilesize data.txt 100
如果data.txt的大小=100,则返回保存文件,大于100则截尾,小于100则扩展文件大小为100。
我在处理输入参数和使用 ftruncate 时遇到问题。我发现的关于 ftruncate 的唯一信息基本上是 man 信息,上面写着:
#include <unistd.h>
int ftruncate(int fildes, off_t length);
int truncate(const char *path, off_t length);
这是我目前所拥有的:
#include <stdio.h>
#include <unistd.h>
int main (int argc, char *argv[]) {
if ( argc != 2 ) {
printf("2 inputs expected\n");
}
else {
int length;
length = atoi (argv[1]);
FILE *file = fopen(argv[0], "r");
int ftruncate(int file, off_t length);
fclose(file);
}
}
如果我输入./changefilesize data.txt 100,我会得到2 inputs expected,但我不明白为什么。
编辑:根据答案更新代码:
#include <stdio.h>
#include <unistd.h>
int main (int argc, char *argv[]) {
long length;
length = atoi (argv[2]);
FILE *file = fopen(argv[1], "w");
ftruncate (fileno(file), length);
fclose(file);
}
【问题讨论】:
-
不带任何参数运行它并打印
argc。 -
我仍然收到
2 inputs expected。 -
如果您正确打印
argc,这是不可能得到的。你应该得到一个号码。 -
这就是我打印 argc
printf ("%d\n", argc);的方式 -
那个 printf 的输出是什么?
标签: c file file-io io truncate