0

私は次のように定義された構造体を持っています

struct my_struct {
    struct hdr_str hdr;
    char *content; 
};

my_structの最初の要素のmy_structのコンテンツを、read()のパラメーターとしてすべてネストして渡そうとしています。

私が持っているのは

struct my_struct[5];

読み取りは次のように定義されます

ssize_t read(int fd, void *buf, size_t count);

そして私はそれを次のように渡そうとしています

read(fd, my_struct[0].content, count)

しかし、errno = EFAULT(不正なアドレス)で、戻り値として-1を受け取っています。

構造体配列のchar*に読み取りを読み取る方法はありますか?

4

1 に答える 1

2

readデータをコピーするためのメモリを割り当てる必要があります。

読み取るデータの最大サイズがわかっている場合は、my_structを次のように変更できます。

struct my_struct {
    struct hdr_str hdr;
    char content[MAX_CONTENT_LENGTH]; 
};

ここでMAX_CONTENT_LENGTH、既知の最大長に#defineされます。

my_struct.contentまたは、読み取るバイト数がわかったら、オンデマンドで割り当てます

my_struct.content = malloc(count);
read(fd, my_struct[0].content, count);

これを行う場合は、後でfreemy_struct.contentを使用して、そのメモリをシステムに戻すようにしてください。

于 2012-10-24T19:46:04.260 に答える