我需要将结构中的数据保持为持久性,即希望将其存储在文件中,并且需要逐个字符地读取该字符...为此,我编写了以下代码...以下代码无效它无法将结构写入文件(逐个字符)... 我需要逐个字符
struct x *x1=(struct x*)malloc(sizeof(struct x));
x1->y=29;
x1->c='A';
char *x2=(char *)malloc(sizeof(struct x));
char *s=(char *)malloc(sizeof(struct x));
for(i=0;i<sizeof(struct x);i++)
{
*(x2+i)=*((char *)x1+i);
}
fd=open("rohit",O_RDWR);
num1=write(fd,x2,sizeof(struct x));
num2=read(fd,s,sizeof(struct x));
for(i=0;i<sizeof(struct x);i++)
printf(" %d ",*(s+i));
我可以使用fread&amp; fwrite ...但我想通过角色来做这个角色...所以我正在使用read&amp;写(他们是直接系统调用rite)...我无法写入它我的写函数显示错误,即它返回-1 ...上面的代码有什么不对...
答案 0 :(得分:0)
看到你将其标记为C ++,我会给你C ++答案。
从我的代码中我可以看出,你有一个struct x1
struct {
int y;
char c;
};
并且你希望将它的状态序列化为磁盘,为此我们需要创建一些流插入和流提取操作符;
//insertions
std::ostream& operator<<(std::ostream& os, const x& x1) {
return os << x1.y << '\t' << x1.c;
}
//extration
std::istream& operator>>(std::istream& is, x& x1) {
return is >> x1.y >> x1.c;
}
现在要对x
的状态进行搜索,我们可以执行以下操作
x x1 { 29, 'A' };
std::ofstream file("rohit");
file << x1;
反序列化
x x1;
std::ifstream file("rohit");
file >> x1;
答案 1 :(得分:0)
如果需要,可以使用以下两个功能:
int store(char * filename, void * ptr, size_t size)
{
int fd, n;
fd = open(filename, O_CREAT | O_WRONLY, 0644);
if (fd < 0)
return -1;
n = write(fd, (unsigned char *)ptr, size);
if (n != size)
return -1;
close(fd);
return 0;
}
int restore(char * filename, void * ptr, size_t size)
{
int fd, n;
fd = open(filename, O_RDONLY, 0644);
if (fd < 0)
return -1;
n = read(fd, (unsigned char *)ptr, size);
if (n != size)
return -1;
close(fd);
return 0;
}