C语言中,有多种方法可以将文本追加到现有文件的末尾。可以使用标准库的fopen和fputs,也可以使用fopen和fprintf,还可以使用低级文件操作函数open和write等方法。

1、使用标准库的fopen和fputs

使用fopen函数以追加模式"a"打开文件,然后使用fputs将文本写入文件。

#include <stdio.h>

int main() {
    FILE *file = fopen("example.txt", "a");  // 以追加模式打开文件
    if (file == NULL) {
        printf("无法打开文件。\n");
        return 1;
    }

    fputs("这是要追加的文本。\n", file);  // 将文本写入文件
    fclose(file);  // 关闭文件
    return 0;
}

2、使用fopen和fprintf

使用fprintf可以在追加文本的同时进行格式化输出。

#include <stdio.h>

int main() {
    FILE *file = fopen("example.txt", "a");
    if (file == NULL) {
        printf("无法打开文件。\n");
        return 1;
    }

    fprintf(file, "这是要追加的文本,带有格式化的内容:%d\n", 123);
    fclose(file);
    return 0;
}

3、使用低级文件操作函数open和write

使用POSIX的open函数以追加模式打开文件,write函数写入数据。这种方法不依赖于标准C库。

#include <fcntl.h>
#include <unistd.h>
#include <string.h>

int main() {
    int fd = open("example.txt", O_WRONLY | O_APPEND);
    if (fd == -1) {
        printf("无法打开文件。\n");
        return 1;
    }

    const char *text = "这是要追加的文本。\n";
    write(fd, text, strlen(text));  // 写入文件
    close(fd);  // 关闭文件
    return 0;
}

4、使用fopen和fwrite

fwrite提供了将二进制数据写入文件的能力,在这里用于写入文本数据。

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

int main() {
    FILE *file = fopen("example.txt", "a");
    if (file == NULL) {
        printf("无法打开文件。\n");
        return 1;
    }

    const char *text = "这是要追加的文本。\n";
    fwrite(text, sizeof(char), strlen(text), file);  // 使用fwrite写入数据
    fclose(file);
    return 0;
}

5、使用内存映射文件(Memory-Mapped File)和mmap

利用mmap将文件映射到内存,然后直接操作内存来追加数据。适用于特定场景下的高级操作。

#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/mman.h>
#include <string.h>

int main() {
    int fd = open("example.txt", O_RDWR | O_APPEND);
    if (fd == -1) {
        printf("无法打开文件。\n");
        return 1;
    }

    const char *text = "这是要追加的文本。\n";
    size_t text_len = strlen(text);
    lseek(fd, 0, SEEK_END);  // 定位到文件末尾

    char *map = mmap(NULL, text_len, PROT_WRITE, MAP_SHARED, fd, 0);
    if (map == MAP_FAILED) {
        printf("内存映射失败。\n");
        close(fd);
        return 1;
    }

    memcpy(map, text, text_len);  // 将数据复制到映射内存中
    munmap(map, text_len);  // 解除内存映射
    close(fd);
    return 0;
}

推荐文档

相关文档

大家感兴趣的内容

随机列表