Cコードでは、popen(/ path / to / script、 'r +')を使用して実行され、結果を保存する次のbashスクリプトがあります(例:DA00000)。これを行うには、bashスクリプトファイルをエクスポートする必要があります。
別のbashスクリプトを使用しないでください。
次のスクリプトを1行のコマンドでどのように記述できますか?
したがって、このコマンドはCコードで直接使用できます(例:fp = popen(command "r"))。
#!/bin/sh
url="$(grep 0x017a /sys/bus/pci/devices/*/device)"
addr="$(echo $url | cut -d/ -f6)"
str="$(head -n1 /sys/bus/pci/devices/$addr/resource | cut -d ' ' -f 1)"
result="${str:${#str} - 8}"
echo $result
答え1
私は2つのパスを思い出しました。
パート1(ウェブサイト+住所)
awk -F/ '/0x017a/ {print $6}' /sys/bus/pci/devices/*/device
第二部
awk 'NR==1 { print substr($1,1,length($1)-8;}' /sys/bus/pci/devices/$addr/resource
これが問題を解決する良い方法であるかどうかはわかりません。
答え2
スクリプトをC文字列に変換し、その文字列を関数に直接渡すことができますpopen(3)
。
popen(3)
プログラム名やコマンドラインだけでなく、引数として渡されるsh -c
(有効なシェルコマンドを含むことができる)スクリプトを使用することに注意してください。
例:
$ perl -e '
print qq{char *script =\n};
while(<>){
s/([\0-\x1f"\\\x7f-\xff])/sprintf "\\x%02x",ord$1/ge;
print qq{\t"$_"\n}
}
print qq{;\n}
' script.sh > script.h
$ cat script.h
char *script =
...
次に、ファイルからC
:
#include script.h
...
FILE *fh = popen(script, "r");