Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在C中只将最后10行写入文件?_C_Linux_File - Fatal编程技术网

如何在C中只将最后10行写入文件?

如何在C中只将最后10行写入文件?,c,linux,file,C,Linux,File,我正在尝试实现一个简单的命令历史记录。这个程序将所有命令写入一个文本文件,但我希望它只存储最后10个命令 #include <stdio.h> #include <string.h> #define SIZE 10 void last_ten_commands(char *command) { FILE *fp; fp = fopen("history.txt", "a+"); fprintf(fp, "%s\n", command);

我正在尝试实现一个简单的命令历史记录。这个程序将所有命令写入一个文本文件,但我希望它只存储最后10个命令

#include <stdio.h>
#include <string.h>

#define SIZE 10

void last_ten_commands(char *command)
{
    FILE *fp;

    fp = fopen("history.txt", "a+");
    fprintf(fp, "%s\n", command);
    fclose(fp);
}

int main(void)
{
    char  command[SIZE];

    fputs("Enter the command\n", stdout);
    while (1) {
        scanf("%s", command);
        if (strcmp(command,"exit") == 0)
            break;
        last_ten_commands(command);
    }
    return 0;
}
#包括
#包括
#定义尺寸10
作废最后十个命令(char*命令)
{
文件*fp;
fp=fopen(“history.txt”,“a+”);
fprintf(fp,“%s\n”,命令);
fclose(fp);
}
内部主(空)
{
char命令[SIZE];
fputs(“输入命令”,stdout);
而(1){
scanf(“%s”,命令);
如果(strcmp(命令,“退出”)==0)
打破
最后十个命令(命令);
}
返回0;
}

最简单的方法是在程序内部保留历史记录列表,作为一个简单的十元素数组,并在历史记录更改时将数组刷新到文件中

要知道数组中放置下一个元素的索引,请使用

current_index = (current_index + 1) % 10;
这将确保您不会超出数组的边界,并且它在到达第十个元素时循环


至于历史数组,它可以是一个简单的
char*
数组或类似数组。

将它们存储在堆栈或列表中。确定。有什么问题吗?例句:我有10个命令。完成后,输入第11个命令。在历史文件中,删除第一行,然后在最后添加第11个命令。为什么不将它们存储在堆栈中,然后将堆栈的前10个元素写入文件中呢。还是循环列表?@sakthi您不能删除文件中的第一行。您必须跳过第一行,逐行将整个文件复制到新文件中。否则就照菲利佩·苏尔的建议去做。