1)我有一个结构,需要使用write()系统调用将其写入文件,而不是fwrite()。这可能吗?
2)在将结构写入文件后,我需要读取另一个文件,并将其写入文件的末尾,结构现在写入。
任何帮助都将不胜感激。
答案 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
或类似的构造格式化的字符串,然后将其写入文件。
现在,您想要读入另一个文件并将其写入刚刚将结构转储到的文件中。只需使用read
和write
一次移动数据块。一个合理的做法是移动磁盘扇区大小的多个块(传统上是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 *