我试图制作一个C程序,通过使用ftruncate截断或扩展输入文件,将输入文件的大小更改为所需的大小。它还必须使用命令行参数。
例如,以下是有效的输入:

./changefilesize data.txt 100

如果data.txt的大小为100,则返回save file,如果大于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]指向的字符串表示程序名,因此您将收到3个参数:changefilesizedata.txt100
在这里

    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文件必须是可写的。

09-11 18:58