1

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

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

任何帮助,将不胜感激。

4

4 回答 4

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); 
}

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

于 2012-10-14T23:44:31.617 回答
1

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

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

所以你会有:

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

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

现在,您想读入另一个文件并将其写入您刚刚将结构转储到的文件中。只需使用readandwrite一次移动数据块。一个合理的做法是移动磁盘扇区大小的倍数(传统上为 512 字节,但现在您可能希望使用 4096 之类的东西)。

于 2012-10-14T23:47:31.650 回答
0

假设你已经声明

struct somestruct_st mydata;

你可以用

ssize_t cnt = write (yourfd, &mydata, sizeof(mydata));
if (cnt != sizeof(mydata)) {
   // handle that case
}
于 2012-10-14T23:45:31.210 回答
0

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

于 2012-10-14T23:48:42.793 回答