Python和C文件同时读/写

时间:2012-04-14 04:38:51

标签: python c multithreading

我有一些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(),另一个将读取相同的文件。 write函数在一个线程中正常工作,但从函数读取的Python函数不起作用。

我做错了什么?

1 个答案:

答案 0 :(得分: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