68user's page 掲示板

Prev< No. 1570> Next  [最新発言に戻る] [過去ログ一覧]
No. 1570 # E田 2001/01/15 (月) 18:55:05
すみません。
また教えて欲しいのですが、これは、Cの質問だと思うのですが、
もしかすると、関数自体が間違っているのかもしれないので、
どうか、教えてください。

下記のような関数を使いたいのです。
int write_sock( int sockfd, char *str )
{
        int write_len = 0;
        int count = 0;
        size_t bytes_sent = 0;
        char *buf;
        char str_buff[1024];

        sprintf( str_buff, "\r%s", str );
        count = strlen( str_buff );
        if( count <= 0 ){
        return( NG );
    }
        buf = str_buff;
        while( bytes_sent < count ){
                do{
                        write_len = write( sockfd, buf, count - bytes_sent );
                } while( ( write_len < 0 ) && ( errno == EINTR ) );
                if( write_len <= 0 ){
                        return( NG );
                }
                bytes_sent += write_len;
                buf += write_len;
        }
        return( OK );
}

この関数を呼び出して使うと、
        write_sock( sd, "test strings.\n" );
これはうまくいきました。
だから、ちゃんと動く関数かなと思っていました。
でも、こういう構造体を作って、
struct test_s {
        unsigned long test1;
        unsigned short test2;
        unsigned short test3;
        unsigned short test4;
        unsigned short test5;
} tes_s;
このようにデータをいれました。
    tes_s.test_1 = Data_1;
    tes_s.test_2 = Data_2;
    tes_s.test_3 = Data_3;
    tes_s.test_4 = Data_4;
    tes_s.test_5 = Data_5;
データはちゃんと入っているのを、printf()で確認しました。
この後、
    write_sock( sd, tes_s );
のように呼び出してみましたが、うまくいきませんでした。
char型のデータでないとソケットでは送れないので、なんとか
文字列にしようとしてみたのですが、文字列の連結として
構造体の各データをつなげる方法がうまくいきません。
    memcpy( tes_s, tes_s.test_1, sizeof(tes_s.test_1) );
    memcpy( &tes_s[4], tes_s.test_2, sizeof(tes_s.test_2) );
のようにやっても、tes_sの文字列に入っていないし、
    sprintf( tes_s[0], "%04d", tes_s.test_1 );
とやると、coreを出してとまってしまいました。
正しいやり方というのはあるのですか?
それとも、やっぱり関数が間違っているんですか?
どうかよろしくお願いします。

Prev< No. 1570> Next  [最新発言に戻る] [過去ログ一覧]