如何将结构成员写入文件?

时间:2014-07-01 18:05:19

标签: c unix

#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <stdlib.h>

typedef struct {
    char name[124];
    int age;
    int class;
} student;

main( ) {
    student s1;
    int fd = -1;
    int fh = creat( "student.db", O_CREAT | S_IRUSR | S_IWUSR );
    fd = open( "student.db", O_RDWR | O_APPEND );
    if ( fd<0 ) {
        perror( "failed to create student file:" );
        return;
    }
    s1.age = 15;
    s1.class = 9;
    strcpy( s1.name, "John" );
    int ret = write( fd, &s1, sizeof( student ) );
    printf( "ret of write: %d \n", ret );
    system( "gvim student.db" );
}

我正在尝试将记录写入文件。由于结构包含整数元素,因此只能成功写入name,而int元素则显示为garbage。任何人都可以看看代码。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

使用od -x之类的命令,您可以获得对调试有用的文件内容的十六进制转储。 如果重新排序结构成员,那么你可以让自己更容易,所以整数是第一个。

一个例子,显示一个从0开始计算64位斐波纳契数的文件:

ladm@ash:~/src/fib/fibs_tab> od -x < fib_uint64| head
0000000 005e 0000 0000 0000 0000 0000 0000 0000
0000020 0001 0000 0000 0000 0001 0000 0000 0000
0000040 0002 0000 0000 0000 0003 0000 0000 0000
0000060 0005 0000 0000 0000 0008 0000 0000 0000
0000100 000d 0000 0000 0000 0015 0000 0000 0000
0000120 0022 0000 0000 0000 0037 0000 0000 0000
0000140 0059 0000 0000 0000 0090 0000 0000 0000
0000160 00e9 0000 0000 0000 0179 0000 0000 0000
0000200 0262 0000 0000 0000 03db 0000 0000 0000
0000220 063d 0000 0000 0000 0a18 0000 0000 0000

第一个整数是一个计数0x5e(93),然后是3个空的较高有效字节,然后序列开始。 0,1,1,2,3,5等等。