You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何创建硬链接?程序中硬链接文件不同步问题求助

问题分析与修复

你的代码核心问题是硬链接创建失败,导致两个文件无法同步,具体原因和修复如下:

关键问题点

  • link(tlink, blahblah)调用失败:link()函数要求第二个参数(新硬链接路径,这里是void.txt)必须不存在。但你在调用link()前,已经通过open(O_CREAT | O_TRUNC)创建并覆盖了void.txt,此时link()会因为目标文件已存在而返回-1,硬链接根本没建立。
  • 缺失错误处理:代码没有检查open()、write()、link()的返回值,无法及时发现调用失败的情况。

修正后的代码

以下是修复后的版本,先确保硬链接创建成功,再操作文件内容:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <string.h>
#include <errno.h>

const char* tlink = "e.txt";
const char* trapcontent = "XP0S3D";
const char* blahblah = "void.txt";

void traplink() {
    // 先删除已存在的void.txt(如果有),确保link可以成功
    if (unlink(blahblah) == -1 && errno != ENOENT) {
        perror("unlink void.txt failed");
        exit(EXIT_FAILURE);
    }

    // 创建硬链接:将void.txt作为e.txt的硬链接
    int ret = link(tlink, blahblah);
    if (ret == -1) {
        perror("link failed");
        exit(EXIT_FAILURE);
    }
    printf("Hard link created successfully!\n");
}

int main() {
    traplink();

    // 写入e.txt,此时void.txt作为硬链接会同步内容
    int fd = open(tlink, O_WRONLY | O_TRUNC, 0644);
    if (fd == -1) {
        perror("open e.txt failed");
        exit(EXIT_FAILURE);
    }
    ssize_t write_len = write(fd, trapcontent, strlen(trapcontent));
    if (write_len != strlen(trapcontent)) {
        perror("write failed");
        close(fd);
        exit(EXIT_FAILURE);
    }
    close(fd);

    // 验证:读取void.txt的内容
    fd = open(blahblah, O_RDONLY);
    if (fd == -1) {
        perror("open void.txt failed");
        exit(EXIT_FAILURE);
    }
    char buf[100] = {0};
    ssize_t read_len = read(fd, buf, sizeof(buf)-1);
    if (read_len == -1) {
        perror("read failed");
        close(fd);
        exit(EXIT_FAILURE);
    }
    printf("void.txt content: %s\n", buf);
    close(fd);

    return 0;
}

修复说明

  1. 先调用unlink()删除已存在的void.txt(如果文件不存在,unlink()返回-1但errno为ENOENT,属于正常情况),确保link()可以成功创建硬链接。
  2. 添加了完整的错误处理逻辑,通过perror()打印具体错误信息,方便调试。
  3. 硬链接创建成功后,操作任意一个文件(比如e.txt),另一个文件(void.txt)会自动同步内容,这是硬链接的特性——多个路径指向同一个inode,共享内容。

内容的提问来源于stack exchange,提问作者Xposed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 09:02:37