#include "common.h"
#include <string.h>
struct buffer
{
int no;
char name[20];
};
int main()
{
struct buffer buf;
struct buffer read_buf;
int fd;
if((fd = open("read_write.txt",O_CREAT|O_RDWR,S_IRUSR|S_IWUSR)) < 0)
{
PRINT_ERROR(errorbuf);
}
buf.no = 10;
strcpy(buf.name,"nitin");
if(write(fd, &buf, sizeof(struct buffer)) < 0)
{
PRINT_ERROR(errorbuf);
}
printf("Written successfully\n");
/* Add code here to read the content of the structure into 'read_buf' */
exit(0);
}
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <fcntl.h>
char errorbuf[20];
#define PRINT_ERROR(errorbuf) \
do \
{ \
sprintf(errorbuf,"%s:%d",__FILE__,__LINE__); \
perror(errorbuf); \
exit(-1); \
}while(0);
我已经在文件中写了一个结构。但我对如何检索先前写入对象'read_buf'的结构的每个元素感到困惑。请告诉我如何做到这一点。
由于
答案 0 :(得分:2)
lseek(fd,0,SEEK_SET);
read(fd,&buf,sizeof(struct buffer);
会起作用,但还有其他一些事情需要你担心。
重新打包以结构化为已知格式(具有已知的字节顺序)几乎总是更好,这样您就可以可靠地读回数据。
答案 1 :(得分:0)
你这样读回来了:
ssize_t bytes_read = read(fd, &buf, sizeof buf);
if(-1 == bytes_read)
; // handle read error
if(sizeof buf != bytes_read)
; // handle incomplete read
答案 2 :(得分:0)
向/从文件写入/读取二进制结构是不可移植的(取决于平台体系结构,结构填充等)。为了使您的程序健壮,您可以使用类似XDR的内容。