C 中的命令行参数和 ftruncate
Command line arguments and ftruncate in C
我正在尝试制作一个 C 程序,通过使用 ftruncate 截断或扩展输入文件来将输入文件的大小更改为所需的大小。它还必须使用命令行参数。
例如,以下是有效输入:
./changefilesize data.txt 100
如果data.txt的大小=100,那么return保存文件,如果超过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);
}
程序的第一个参数是它的名称(在 argv[0] 中)。因此,如果您提供 2 个参数,argc
为 3(路径 + 2 个参数)。
有关详细信息,请参阅 this question。
argv[0]
指向的字符串表示程序名称,因此您将收到 3 个参数:changefilesize
、data.txt
和 100
。
这里
FILE *file = fopen(argv[0], "r");
int ftruncate(int file, off_t length);
fclose(file);
第二行是原型(不是对ftruncate
的调用)改为
FILE *file = fopen(argv[1], "w"); /* 1 instead of 0 and "w" instead of "r" */
ftruncate(fileno(file), 100);
fclose(file);
请注意,ftruncate
文件必须是可写的。
我正在尝试制作一个 C 程序,通过使用 ftruncate 截断或扩展输入文件来将输入文件的大小更改为所需的大小。它还必须使用命令行参数。
例如,以下是有效输入:
./changefilesize data.txt 100
如果data.txt的大小=100,那么return保存文件,如果超过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);
}
程序的第一个参数是它的名称(在 argv[0] 中)。因此,如果您提供 2 个参数,argc
为 3(路径 + 2 个参数)。
有关详细信息,请参阅 this question。
argv[0]
指向的字符串表示程序名称,因此您将收到 3 个参数:changefilesize
、data.txt
和 100
。
这里
FILE *file = fopen(argv[0], "r");
int ftruncate(int file, off_t length);
fclose(file);
第二行是原型(不是对ftruncate
的调用)改为
FILE *file = fopen(argv[1], "w"); /* 1 instead of 0 and "w" instead of "r" */
ftruncate(fileno(file), 100);
fclose(file);
请注意,ftruncate
文件必须是可写的。