/ /名前付きパイプを使用して読み取り/書き込み環境を作成する-bash、リダイレクト、システム検証

名前付きパイプを使った読み書き環境の作成 - bash、redirect、system-verilog

RedHat EL 4を使用しています。Bash3.00.15を使用しています。

SystemVerilogを書いていますが、エミュレートしたいですstdinおよびstdout。通常の標準入力および標準出力は環境でサポートされていないため、ファイルのみを使用できます。名前付きパイプを使用して、stdinとstdoutをエミュレートしたいと思います。

mkpipeを使用してto_svおよびfrom_svファイルを作成する方法と、SystemVerilogでそれらを開いて使用する方法を理解しています。

「cat> to_sv」を使用して、SystemVerilogシミュレーションに文字列を出力できます。しかし、それはまた、シェルで入力しているものを出力します。

可能であれば、UARTターミナルのように機能する単一のシェルが必要です。入力したものはすべて「to_sv」に直接出力され、「from_sv」に書き込まれたものはすべて出力されます。

私がこれについて完全に間違っている場合は、必ず正しい方法を提案してください!どうもありがとうございます、

ナチュム・カノフスキー

回答:

回答№1は2

編集:名前付きパイプに出力し、同じ端末の他のパイプから読み取ることができます。キーを無効にして端末にエコーすることもできます stty -echo.

mkfifo /tmp/from
mkfifo /tmp/to
stty -echo
cat /tmp/from & cat > /tmp/to

このコマンドを書くと、あなたが書くすべてのものが行きます /tmp/to エコーされず、すべてが書き込まれます /tmp/from エコーされます。

更新:/ tmp /に入力されたすべての文字を一度に1つずつ送信する方法を見つけました。の代わりに cat > /tmp/to 次のコマンドを使用します。

while IFS= read -n1 c;
do
if [ -z "$c" ]; then
printf "n" >> /tmp/to;
fi;
printf "%s" "$c" >> /tmp/to;
done

回答№2の場合は0

おそらく、 exec 次のように:

exec > to_sv
exec < from_sv

セクションを見る 19.1. そして 19.2。の中に 高度なBashスクリプトガイド-I / Oリダイレクト


回答№3の場合は0

の代わりに cat /tmp/from & あなたが使うかもしれない tail -f /tmp/from & (少なくともここではMac OS X 10.6.7で、もし私が echo に複数回 /tmp/from)。

リンチのコードに基づいて:

# terminal window 1
(
rm -f /tmp/from /tmp/to
mkfifo /tmp/from
mkfifo /tmp/to
stty -echo
#cat -u /tmp/from &
tail -f /tmp/from &
bgpid=$!
trap "kill -TERM ${bgpid}; stty echo; exit" 1 2 3 13 15
while IFS= read -n1 c;
do
if [ -z "$c" ]; then
printf "n" >> /tmp/to
fi;
printf "%s" "$c" >> /tmp/to
done
)

# terminal window 2
(
tail -f /tmp/to &
bgpid=$!
trap "kill -TERM ${bgpid}; stty echo; exit" 1 2 3 13 15
wait
)

# terminal window 3
echo "hello from /tmp/from" > /tmp/from