/* unix_client.c ストリームソケットを用いたプロセス間通信(UNIXドメイン

/* unix_client.c ストリームソケットを用いたプロセス間通信(UNIXドメイン) */
#include
<stdio.h>
/* socket関連システムコール用ヘッダーファイル */
#include
#include
#include
<sys/types.h>
<sys/socket.h>
<sys/un.h>
#define
BUFSIZE
256
#define
ERR
-1
#define
SERVER_SOCKET "mysocket"
/* バッファサイズ */
/* システムコールのエラー */
main(int argc, char *argv[])
{
int
sockfd;
struct
sockaddr_un server;
struct
hostent
/* サーバのソケットの名前(パス名) */
/* socket()の返すファイル記述子 */
/* サーバプロセスのソケットアドレス情報 */
/* ホスト情報 */
*hp;
char
buf[BUFSIZE];
int
msglen;
/* メッセージを格納するバッファ */
/* メッセージ長 */
if(argc != 2){/* コマンドの引数が正しく与えられなかった場合 */
fprintf(stderr,"Usage: %s message(StoC)\n", argv[0] );
exit(1);
}
/* ソケットの作成 */
if( (sockfd = socket(PF_UNIX, SOCK_STREAM, 0)) == ERR) {
perror("client: socket");
exit(1);
}
/* サーバプロセスのソケットアドレス情報の設定 */
/* アドレス情報構造体の初期化 */
bzero((char *)&server, sizeof(server));
/* プロトコルファミリの設定 */
server.sun_family = PF_UNIX;
bcopy(SERVER_SOCKET, server.sun_path, sizeof(SERVER_SOCKET));
/* ソケットの名前(パス名)の設定 */
if( connect(sockfd, (struct sockaddr *)&server, sizeof(server)) == ERR){
/* 接続要求の発信 */
perror("client: connect");
exit(1);
}
msglen = strlen(argv[1]) + 1;
if( write(sockfd, argv[1], msglen) == ERR ) {/* サーバプロセスへのメッセージ送信 */
perror("client: write");
exit(1);
}
if( read(sockfd, buf, BUFSIZE) == ERR ) { /* サーバプロセスからのメッセージ受信 */
perror("client: read");
exit(1);
}
printf("\n<CLIENT> message from server
}
:
%s\n\n",buf);
close(sockfd);
/* ソケットのクローズ */
exit(0);
/* 正常終了 */