0

我是一个相对不错的 Java 程序员,但对 C 完全陌生。因此,其中一些函数、指针等给我带来了一些麻烦......

我正在尝试创建一个存档文件(我基本上是在重写 ar sys 调用)。我可以 fstat 我想要的文件,将必要的信息存储到我定义的结构中。但现在我的麻烦来了。我想将结构写入存档文件。所以我想我可以sprintf()把我的结构放入一个缓冲区,然后只写缓冲区。

sprintf(stat_buffer, "%s", file_struct);
write(fd, stat_buffer, 60);

这似乎不起作用。我可以告诉存档文件的大小增加了所需的 60 个字节,但如果我cat是文件,它会打印出废话。

此外,尝试写入文件的实际内容也不起作用......

    while (iosize = read(fd2, text_buffer, 512) > 0) {
        write(fd, text_buffer, iosize);
        if (iosize == -1) {
            perror("read");
            exit(1);
        }
    }

我敢肯定这是一个相对简单的修复,只是好奇它是什么!

谢谢!

4

1 回答 1

2

%s用于打印字符串。所以冲刺会在遇到\0角色时停止。

相反,您可以直接将结构写入文件。write(fd, &file_struct, sizeof(filestruct));但是您将无法通过 cat call 阅读它。您仍然可以从另一个 unarchiver 程序读取文件内容并将其存储到结构中read(fd, &filestruct, sizeof(filestruct));

无论如何,这个系统并不完美,因为它将使用您的计算机字节序存储结构并且不会便携。如果您想正确执行,请查看ar 文件格式规范

于 2012-09-30T22:47:41.120 回答