- 论坛徽章:
- 0
|
char *data="2222222222222";
my_data.data_=data;
fwrite(&my_data,sizeof(my_data),1,fp);
你 printf一下sizeof(my_data)看看,存的实际长度根不是你要的长度
void *data_; 只是一个指针
上面的结构要添充 int data_len 数据的长度, fwrite 的时候要把实际有效的长度写上
=============
补上我测度的代码
- $ cat main.c
- #include <glib.h>
- #include <time.h>
- #include <unistd.h>
- #include <stdio.h>
- #include <string.h>
- typedef struct _data {
- int data_len;
- time_t timestamp_;
- void *data_;
- }data_t;
- int main()
- {
- data_t my_data;
- FILE *fp;
- char *data="2222222222222";
- time_t timep;
- time(&timep);
- my_data.timestamp_=timep;
- my_data.data_ = data;
- my_data.data_len = strlen(my_data.data_);
- g_printf("data_len = %d\n", my_data.data_len );
- fp = fopen("./temp","wb");
- fwrite(&my_data.data_len, sizeof(int), 1, fp);
- fwrite(&my_data.timestamp_, sizeof(time_t), 1, fp);
- fwrite(my_data.data_, my_data.data_len, 1, fp);
- fclose(fp);
- return 0;
- }
复制代码
- $ cat read.c
- #include <glib.h>
- #include <time.h>
- #include <unistd.h>
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- typedef struct _data {
- int data_len;
- time_t timestamp_;
- void *data_;
- }data_t;
- int main()
- {
- data_t my_data;
- FILE *fp;
-
- time_t timep;
- time(&timep);
- my_data.timestamp_=timep;
- my_data.data_ = NULL;
- my_data.data_len = strlen(my_data.data_) + sizeof(int) + sizeof(time_t);
- fp = fopen("./temp","rb");
- fread(&my_data.data_len, sizeof(int), 1, fp);
- g_printf("data_len = %d\r\n", my_data.data_len);
- my_data.data_ = malloc(my_data.data_len);
- fread(&my_data.timestamp_, sizeof(time_t), 1, fp);
- fread(my_data.data_ , my_data.data_len, 1, fp);
- g_printf("data_ = %s\r\n", my_data.data_ );
- free(my_data.data_ );
- fclose(fp);
- return 0;
- }
复制代码
- ] $ cat Makefile
- all:test read_time
- test:main.c
- $(CC) -o $@ $(shell pkg-config --cflags --libs glib-2.0 gthread-2.0) $^
- read_time:read.c
- $(CC) -o $@ $(shell pkg-config --cflags --libs glib-2.0 gthread-2.0) $^
- clean:
- -rm -f *.o test
复制代码
读的结果
- $ ./read_time
- data_len = 13
- data_ = 2222222222222
复制代码
[ 本帖最后由 axlrose 于 2010-1-19 18:08 编辑 ] |
|