[#5219] ruby for perl users — Noritsugu Nakamura <nnakamur@...>

35 messages 1997/11/09
[#5220] Re: ruby for perl users — tateishi@... (Tateishi Takaaki) 1997/11/09

立石です。

[#5224] Re: ruby for perl users — shugo@... (Shugo Maeda) 1997/11/09

前田です。

[#5243] read from subprocess — Kikutani Makoto <kikutani@...>

きくたにです。

17 messages 1997/11/10
[#5250] Re: read from subprocess — matz@... (Yukihiro Matsumoto) 1997/11/11

まつもと ゆきひろです

[#5300] Win32用の Rubyでの tkの使用 — Tomoaki Takebayashi <tota@...>

はじめまして、竹林といいます。

14 messages 1997/11/15
[#5302] Re: Win32用の Rubyでの tkの使用 — WATANABE Hirofumi <eban@...> 1997/11/15

わたなべです.

[#5303] Re: Win32 用の Rubyでの tkの使用 — Tomoaki Takebayashi <tota@...> 1997/11/15

[#5305] Re: Win32 用の Ruby での tk の使用 — aito@...5sun.yz.yamagata-u.ac.jp 1997/11/17

あ伊藤です.

[#5320] ruby 1.0-971118 released — matz@... (Yukihiro Matsumoto)

まつもと ゆきひろです

20 messages 1997/11/18
[#5337] Re: ruby 1.0-971118 released — WATANABE Hirofumi <watanabe@...> 1997/11/19

わたなべです.

[#5340] Re: ruby 1.0-971118 released — matz@... (Yukihiro Matsumoto) 1997/11/19

まつもと ゆきひろです

[#5398] 配列への追加について — a-nisida@... (西田明良)

はじめまして、西田@初心者 と申します。m(..)m

16 messages 1997/11/22

[ruby-list:5476] Re: communicate with subprocess part II

From: Kikutani Makoto <kikutani@...>
Date: 1997-11-28 07:09:15 UTC
List: ruby-list #5476
きくたにです。
助田さん、了解です。

Fri, Nov 28, 1997 at 11:10:37AM +0900 において
Kikutani Makoto さん曰く:

> 質問その2:
> ipc-test1.rb のように双方向のパイプ(?)を作るのはPythonではできない
> そうですが、Cで書くにはどうすればいいのでしょうか?

こっちはNutshell本のUsing C on the UNIX Systemを見てたら
似たよなのがあったので、こうしてみました。

------------------------------------------------------------
#include <stdio.h>
main()
{
   FILE *fpw, *fpr;
   int pid, pipefds[2];
   int i[1];
   char resp[5];

   if (pipe(pipefds) < 0) {
      perror("pipe");
      exit(1);
   }

   if ((pid = fork()) < 0) {
      perror("fork");
      exit(1);
   }

   if (pid == 0) { /* child */
      dup2(pipefds[0], 0);
      dup2(pipefds[1], 1);
      close(pipefds[0]);
      close(pipefds[1]);
      execl("./ipc1.rb", "ipc1.rb", 0);
      perror("exec");
      exit(1);
   }
   /* parent */
   if ((fpw = fdopen(pipefds[1], "w")) == NULL) {
      perror("fdopen w");
      exit(1);
   }
   if ((fpr = fdopen(pipefds[0], "r")) == NULL) {
      perror("fdopen r");
      exit(1);
   }

   i[0] = 0x12345678;
   fwrite(i, sizeof(int), 1, fpw);
   fflush(fpw);
   fread(resp, 1, 2, fpr);
   resp[2] = '\0';
   fprintf(stderr, "ipc-test1.c: %s\n", resp);
   fwrite("ruby", sizeof(char), 4, fpw);
   fflush(fpw);
   fread(resp, 1, 2, fpr);
   resp[2] = '\0';
   fprintf(stderr, "ipc-test1.c: %s\n", resp);

   exit(0);
}
------------------------------------------------------------

結果は

ipc-test1.c: xV
ipc-test1.c: 4
ipc1.rb: int byte = 72
ipc1.rb: int byte = 75
ipc1.rb: int byte = 62
ipc1.rb: int byte = 79

なんか変。
rubyじゃなくなってすみませんが、Unixプログラムのシロートに
教えてやってください。

-- 
人生を背負い投げ

菊谷 誠(Kikutani Makoto)  kikutani@eis.or.jp kikutani@jdc.ericsson.se
hgf03701@niftyserve.or.jp    http://www.eis.or.jp/muse/kikutani/

In This Thread