如何使用write()将结构写入文件

时间:2012-10-14 23:40:53

标签: c

1)我有一个结构,需要使用write()系统调用将其写入文件,而不是fwrite()。这可能吗?

2)在将结构写入文件后,我需要读取另一个文件,并将其写入文件的末尾,结构现在写入。

任何帮助都将不胜感激。

4 个答案:

答案 0 :(得分:5)

这会将您的结构写入文件。

int fd = open(file, O_WRONLY);
struct my_struct a;

write(output, &a, sizeof(struct my_struct));

对于另一个文件,只需打开它,在循环中读取它的内容,然后将其写入上一个文件。

int fd2 = open(otherfile, O_RDONLY);
int readret;
char buf[4096];

while ((readret = read(fd2, buf, sizeof(buf) != 0) {
  write(fd, buf, readret); 
}

记得测试每个写入/读取结果(如评论中所述),并处理这些错误。

答案 1 :(得分:1)

如果您正在谈论用二进制编写结构,那么是的。 K& R中描述的功能用法是:

int n_written = write( int fd, char *buf, int n );

所以你会:

struct mystruct s;
write( fd, (char*)&s, sizeof(s) );

如果您希望在文本中序列化结构,您将需要使用sprintf或类似的构造格式化的字符串,然后将其写入文件。

现在,您想要读入另一个文件并将其写入刚刚将结构转储到的文件中。只需使用readwrite一次移动数据块。一个合理的做法是移动磁盘扇区大小的多个块(传统上是512字节,但是现在你可能想要采用像4096这样的通用性)。

答案 2 :(得分:0)

假设你已宣布

struct somestruct_st mydata;

你可以用

来写
ssize_t cnt = write (yourfd, &mydata, sizeof(mydata));
if (cnt != sizeof(mydata)) {
   // handle that case
}

答案 3 :(得分:0)

写和fwrite只是工作方式相同唯一的区别是write使用文件destriptor(fd),其中fwrite使用FILE *