0

我有一些 C 代码,我在 Python 中对其进行了扩展。扩展的 C 代码具有将一些结构附加到二进制文件的功能:

void writefunction(const struct struct1* some,const u_char* struct2){
    f=fopen('save.bin',"ab");
    if(f==NULL){
        printf("Unable to open file");
        exit(-1);
    }
    fwrite(some,sizeof(struct struct1),1,f);
    fwrite(struct2,sizeof(u_char),4,f);
    fclose(f);
}

现在我已经在 Python 中导入了代码。我想在 Python 中启动两个线程:一个将运行这个 writefunction(),另一个将读取同一个文件。writefunction 在一个线程中正常工作,但从文件读取的 Python 函数不工作。

我究竟做错了什么?

4

1 回答 1

0

不要这样做。

这里的问题是,“save.bin”文件的内容取决于您使用的 C 编译器 - 可能还取决于您传递给编译器的一些命令行参数。

结构struct1在内存中的内部保存方式取决于编译器——至少在使用位域时;编译器也可能添加填充(参见下面的示例)。您将内部存储器结构写入文件。

如果您想与用不同语言编写的程序交换数据(并且可能在不同的服务器上运行),您应该使用一些“有线”(序列化)协议来转换它们。

建议:也许选择 JSON 或 XML。

填充结构的示例:

#include <stdio.h>

struct struct1 {
   char a;
   long b;
};

int main() {
   printf("%d %d %d\n", sizeof(char), sizeof(long), sizeof(struct struct1));
   return 0;
}

一种可能的输出是:

1 8 16
于 2012-04-14T06:15:35.723 回答