0

LinuxボードにttyHS4(コントロール)およびttyHS5(データ)としてインストールされているオプションモデムからRSSI値を取得しようとしています。期待される結果がコンソールに表示されますが、fgetsはコンソール出力データをキャプチャしません。

if ((f=popen("echo -e \"AT+CSQ\r\n\">dev\ttyHS4","r"))==NULL){  
perror("popen");  
exit(1);  
}  

while (fgets(buff,sizeof(buff),f){  
printf(":%s:\n",buff);  
}  

popenコマンドで「echo\"TEST \"」を使用してテストしたところ、上記のコードで「:TEST:」文字列を出力できました。ttyHS4出力では、コンソールでいくつかの出力しか取得できませんが、fgets+fprintfは作業するデータを取得しません。

どこで失敗したのか教えてください。

4

2 に答える 2

1

このコマンドの標準出力をメインプログラムに送るファイル記述子を作成するために呼び出しpopen()ています。

echo -e ... >/dev/ttyHS4

このコマンドはそのファイル記述子に何も送信しないことに気づいていますpopen()シェルを開きます-通常/bin/sh-それからそのコマンドを実行します。へのリダイレクトにより/dev/ttyHS4echoコマンドはその標準出力を親シェルと同じファイル記述子に送信しません。これにより、何も書き込まれなくなります。fそれが問題でechoはなかったとしても、モデムの応答が読み戻されることはありません。 ..

しかし、読み取り/書き込みを開いて、結果のファイル記述子を直接使用するのではなく、なぜpopen()とを使用しているのでしょうか。echo/dev/ttyHS4read()write()

于 2012-12-30T12:14:10.870 に答える
0

パスにタブ文字が含まれることは非常にまれです。あなたはおそらくするつもりでした:

popen("echo \"AT+CSQ\">/dev/ttyHS4","r")
于 2012-12-30T08:30:20.683 に答える