• 締切済み

Win上の名前付きパイプへJava (Jython)からデータを書き込むには

Windows上で、Javaプログラムから名前付きパイプへデータを書き込むには、 どのようにしたらよろしいでしょうか? Win上の非Javaのアプリケーションで、名前付きパイプを使ってデータを 受取ろうとしています(仮にloaderとします)。データ出し側のプログラムが JDBC経由でRDBにアクセスするJava(Jython)プログラム(extractorとします) なのですが、どうしてもextractorがloaderの作った名前付きパイプへデータを アクセスできません。 ファイル名指定に、 '\\.\pipe\mypipe'と'//./pipe/mypipe' の両方を 試したのですが、どちらもエラーとなってしまいます。 (loaderを立ち上げておいて、cmd.exeから 'echo "aaa,bbb" > \\.\pipe\mypipe'とするとloader.exeの方で データを取得できているので、loaderとパイプは機能しているのが 確認できています。)

  • Java
  • 回答数1
  • ありがとう数0

みんなの回答

  • rinkun
  • ベストアンサー率44% (706/1571)
回答No.1

> '\\.\pipe\mypipe' "\\\\.\\pipe\\mypipe" ではなくて? 無理ならJNI経由でパイプを開かないといけないかも。

関連するQ&A

  • Javaで名前付きパイプ通信

    プラットフォームWindows 2003サーバー。 C++のexeプログラムとJavaプログラム。 名前付きパイプでのプロセス間通信をしたいと考えています。 C++側は問題ないと思いますが、Java側で対応できますか? java.ioパッケージ内にpipedWriter/pipedReaderクラスがあるようですが、名前指定等がないようです。 どうぞご教授ください。

  • 中間ファイルを使わずに処理させる方法

    cmd1.exe は、標準入力でデータを読み込み、 結果を標準出力するようなプログラムです。 $ cmd1.exe < test.txt d090206 p314159 r214142 $ このcmd1.exeをperlスクリプト内で呼び出し、その結果を求めるやり方として、 従来、次のようなやりかた・・・ open(OUT,">temp.txt") || die "$!"; foreach(・・・){ 中略 print OUT "$_\n"; } close(OUT); my @answer = `cmd1.exe < temp.txt`; foreach(@answer){ : 略 } unlink("temp.txt"); のようなことをしています。 今は、中間ファイルを書き出しては、最後にファイル削除して、ということをやっているのですが、 このような中間ファイルを使わずに、パイプ(?)という仕組みを使って、同じように処理させるには、 どのようにコーディングすれば良いですか? 試してみたこととして、 open(PIPE,"|cmd1.exe"); foreach(・・・){ 中略 print PIPE "$_\n"; } close(PIPE); のようにすれば、exeの呼び出しそのものは出来たのですが、 その標準出力の結果を上手く内部で受け取れません。 よろしくお願い致します。

    • ベストアンサー
    • Perl
  • Javaで名前付きパイプ

    Windows上でJavaとFortranを使用し、プロセス間通信を行いと考えています。単純に思いついたのが名前付きパイプなのですが、Javaで名前付きパイプを生成する方法が解りません。 どなたかご存じないでしょうか? ちなみに、 try { // ファイルオブジェクトを生成する file.createNewFile(); FileOutputStream fileOutputStream = new FileOutputStream("\\\\.\\PIPE\\mypipe");<<ここでエラーになる。 OutputStreamWriter outputStreamWriter = new OutputStreamWriter(fileOutputStream); BufferedWriter bufferedWriter = new BufferedWriter(outputStreamWriter); // ファイルに書き込む内容をセットする String outputdata = "TESTDATA";   <<< 以下省略 >>>> こんな感じで、試してみたのですが、ファイルの生成ができませんでした。 色々と調べてはいるのですが、どなたか成功した方いらっしゃいませんか?最悪はJNIを利用するしかないのかなぁ?

  • パイプのプログラム

    ここまでプログラムはできているのですが、親プロセスと子プロセスのところが分かりません。どなたかお願いします! XXX%a.out a|b のように入力して、コマンドaとコマンドbを、並列処理するプログラムを作っています。 なお、コマンドの実行は execl("/bin/コマンド名",コマンド名,NULL) というシステムコールを利用します。 パイプの生成およびファイル記述子の複製は、 pipe(pipefd)、 dup(pipefd[0])またはdup(pipefd[1]) のシステムコールを用います。 プログラム #include<stdio.h> #include<string.h> main(int argc,char *argv[]) { int pipefd[2],pid; char cmd_a[20]="/bin/"; if(pipe(pipefd)==-1) { perror("pipe error"); exit(1); } if((pid=fork())==-1){ perror("fork error"); exit(1); } if(pid!=0){ /*親プロセス*/ strcat(cmd_a,argv[1]); /*子プロセス*/

  • javaからAccessをアクセスするときにファイルを直接指定できないのですか?

    JavaでMicrosoft Accessにアクセスするときに以下のプログラムでアクセスしました。 Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); Connection con = DriverManager.getConnection("jdbc:odbc:DBs"); このプログラムを作成する前にODBC データソース アドミニストレータでデータベースの登録を行いました。 データベース名はデータソース名に拡張子を付けた名前にしました。 ODBC データソース アドミニストレータの登録を行わずにプログラムの中にファイルの場所を記述してMicrosoft Accessにアクセスすることはできないのでしょうか?

  • C#での関数テーブルの作り方

    お世話様です。 C++で関数ポインタを使用していたのですが、C#にそのまま持ってくると エラーが発生します。 C++でのコードをどのように変更したら良いでしょうか。 [C++] typedef struct {  char *cmd;  BOOL (*exe)(char* oprand); }FTBL; FTBL tbl[] = {  { "AAA", aaa },  { "BBB", bbb },  { "CCC", ccc } }; [C#](当方のコードでエラーがでます。) delegate bool Execute( string oprand ); struct FTBL{  string cmd;  Execute exe; }; FTBL[] tbl = {  { "AAA", aaa },  { "BBB", bbb },  { "CCC", ccc } }; コマンド名とコマンド関数のテーブルですが、要は関数テーブルの 作り方を知りたいのです。 ご教授よろしくお願いいたします。

  • パイプを用いた通信 C#とMATLAB

    パイプを使用しC#から送信したデータをMATLABで受信することは可能でしょうか?   もし可能であるならばどのようにすればよいのでしょうか。 以下のプログラムで行っているのですがMATLAB側で受信ができず -1がかえってきてしまいます C言語で受信する場合はうまくいくのですがMATLABを使用するとファイルのopneができません。 以下C#・MATLABプログラム C# <プログラム> 送信側 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO.Pipes; using System.IO; namespace PipeTest { class Program { static void Main(string[] args){ Console.WriteLine("パイプ接続待ち..."); NamedPipeServerStream pipe = new NamedPipeServerStream("test"); pipe.WaitForConnection(); Console.WriteLine("送信(キーを押すと終了)"); StreamWriter stw = new StreamWriter(pipe); stw.AutoFlush = true; while(Console.KeyAvailable == false) { stw.WriteLine("This is a test"); System.Threading.Thread.Sleep(500); } Console.WriteLine("終了"); pipe.Close(); } } } MATLAB <プログラム> 受信側 fp = fopen('C:\\\\.\\pipe\\test');

  • ExcelVBA 一致する名前に対してデータを設定する方法について

    初めまして。tommy57111と申します。 ExcelVBAでプログラムの実現方法をご教授願いたいと思い投稿させて頂きました。 2つの表があり、<Sheet1>の一致する"名前"に対して、 <表1>の"年齢"欄に<Sheet2>の"年齢"を取得して、設定を行いたいです。 "名前"と"年齢"を一つのデータとして、<Sheet2>から取得し、 <Sheet1>で一致する名前を検索して、値を設定すれば良いことまではわかるのですが、実現方法がわかりません。 どなたかご教授をよろしくお願い致します。 <Sheet1> A B C -------------------------- 1 |名前 | 年齢 | 住所 | 2 |A | | AAA | 3 |B | | BBB | 4 |C | | CCC | <Sheet2> A B ------------------- 1 |名前 | 年齢 | 2 |B | 23 | 3 |A | 30 | 4 |C | 18 | ↓結果 A B C -------------------------- 1 |名前 | 年齢 | 住所 | 2 |A | 30 | AAA | 3 |B | 23 | BBB | 4 |C | 18 | CCC |

  • Accessでデータに連番をつけたい

    Accessで、ひとつの親番号に対していくつかの子番号 をひもつけて管理したいと考えています。 例: 親番号 AAA BBB CCC 子番号 001、002、003 →AAA-001、  AAA-002・・・  BBB-001、  BBB-002・・・ というふうに管理する。 そこで、データの新規登録時に親番号を取得後、フォーム上でボタンを押すと自動的に「親-子」という形になるようにしたいのですが、どうすればよいでしょうか? イベントプロシージャがなかなかうまく行かず・・。 お助けください!

  • AccessのデータをjavaプログラムからSQL文を使って操作したい。

    フォーム上の入力欄で入力したデータベースのパスを使って、Accessのデータをjavaプログラムから SQL文を使って操作したいのですがどのような手段があるでしょうか? javaとAccessの接続について初めてで条件に合った方法を探せずにいます。 以下がこれまで試みた手段です。 JDBC-ODBCを使った場合、パスの設定がプログラム上で設定できませんでした。ODBC データソース アドミニストレータで登録をしなければなりませんでした。 jackcessはパスを入力欄から入力できましたが、SQL文が使えませんでした。

    • ベストアンサー
    • Java

専門家に質問してみよう