-2

我有一个结构,我想将其作为一条记录写入常规文件,并带有逗号分隔的字段。例如

    struct A {
      int a;
      int b;
   } test;

给定test.a=1and test.b = 2,常规文件将有一个对应1,2的一行记录。另一个要求是我想用一个系统调用编写整个结构。因此,我创建了 a char buffer[10],将 int a,b 的值存储到缓冲区中,用逗号分隔和换行符,并使用 Linux 系统 write() 调用来写入缓冲区。

问题是记录在文件中最终以二进制形式出现。这是直观的,因为我从变量中删除了“类型”,我将它们存储在一个 char 数组中。我可以使用标准 io,但我想了解如何使用具有概述约束的标准 linux 系统调用来实现预期的结果。我怎样才能保留变量的“典型性”。所谓类型,我的意思是如果变量是 int 类型,那么常规文件应该有人类可读的数字。

4

3 回答 3

5

你想要做的是fprintf(fh, "%d,%d\n", test.a, test.b);,如果你用fopen. 如果你真的write()因为某种原因必须使用,你可以sprintf(buffer, "%d,%d\n", test.a, test.b); write(fd, buffer, strlen(buffer));

于 2013-01-14T16:59:18.763 回答
2

fprintf(fh, "struct:A{int:%d,int:%d}\n", test.a, test.b);

在某些环境中,您可能可以编写:

fprintf(fh, "struct:%s{%s:%d,%s:%d}\n", typeid(A).name(), typeid(test.a).name(), test.a, typeid(test.b).name(), test.b);

于 2013-01-14T17:22:36.377 回答
1

如果您希望文件是人类可读的,请使用fprintf ,使用类似的代码编写文件

void writeArrayToFile(struct A* array, int count)
{
    int i;
    FILE* fp;
    // open file

    for (i=0; i<count; i++) {
        fprintf(fp, "%d,%d\n", array[i].a, array[i].b);
    }
    fclose(fp);
}
于 2013-01-14T16:56:46.193 回答