0

ここに、インタラクティブモードのようなコマンドが1つあります。

obex_test -b $BD_ADDR $CH_NUM

このコマンドはスクリプトからのものですが、Cプログラムのシステムコールを介してこのコマンドを実行したいと思います。 obex_test閂ファイル転送ライブラリに他なりません。ここでは、Bluetoothを介してリモートデバイスからローカルデバイスにファイルを受信したいと思います。これはobex_testのマニュアルページです

このコマンドのようにCプログラムをインタラクティブモードにするにはどうすればよいか教えてください。このコマンドも使用したいと思います。

私は使用popen(command,"r")しましたが、役に立ちませんでした。ユーザーからの入力は受け取りません。モードを使用"w"した場合、何が起こるかわかりません。のようなメッセージが直接表示されます>Unknown Command。これは、さまざまなオプションを指定したときにこのコマンドが出すエラーです。したがって、書き込みモードとして何かを取ります。

4

2 に答える 2

1

( pipe(2)システムコールで作成された) 2 組のパイプを持つことができます。1 つはプログラムからobex_teststdinへのデータ用で、もう 1 つはobex_teststdoutからプログラムへのデータです。次にforkexecve...デッドロックに注意してください(出力パイプがいっぱいになり、それをブロックしているときにプログラムがobex_test stdinへの書き込みをブロックします)、 poll(2)またはselect(2)...を呼び出す必要があるかもしれません

ただし、man ページで説明されているように、「obex_testlibopenobexライブラリのテスト アプリケーションです」。では、プログラムにリンクするこのlibopenobexライブラリ内の関数を直接呼び出さないのはなぜでしょうか?

于 2012-01-27T06:58:26.427 に答える
-1

システムコマンドを使用できます。詳細については、マニュアル ページを確認してください。たとえば、system( "obex_test -b 172.16.7.1 1234" );

于 2012-01-27T05:17:49.990 に答える