Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 検証済み。一応動いた。
- ■C側
- char abname[] = "foobar"; //ソケットの名前
- int fd;
- struct sockaddr_un sockAddr;
- socklen_t len;
- fd = socket(AF_LOCAL, SOCK_STREAM, PF_UNIX); //ローカルソケットをオープン
- sockAddr.sun_family = AF_LOCAL; //ローカルソケット
- sockAddr.sun_path[0] = '\0'; //抽象ソケットのお約束
- strcpy(sockAddr.sun_path + 1, abname); //sun_pathの2バイト目以降にソケットの名前をコピー
- len = sizeof(sockAddr.sun_family) + 1 + strlen(abname); //抽象ソケットのお約束
- connect(fd, (const struct sockaddr *)&sockAddr, len); //接続開始
- dup2(fd, 1); //標準出力の出力先をfdに切り替え
- close(fd); //fdは多分不要なので閉じる
- //これ以降、標準出力が全部ソケットに流れるようになる
- ■Java側
- LocalServerSocket stdinoutserver = new LocalServerSocket("foobar"); //ローカルソケットをサーバーとしてオープン
- //ここ以降はブロッキングが発生するので別スレッドで
- LocalSocket stdinout = stdinoutserver.accept(); //待ち受け開始
- InputStream ins = stdinout.getInputStream(); //ストリームに変換
- //受け取り処理
- byte[] buf = new byte[1024];
- int len;
- while ((len = ins.read(buf)) >= 0) {
- String str = new String(buf);
- //strをどうにかこうにかする
- }
- //受け取り処理ここまで
- ins.close(); //閉じる
- stdinout.close(); //閉じる
- //スレッドでの処理ここまで
- stdinoutserver.close(); //閉じる
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement