C 코드에서 popen(/path/to/script, 'r+')을 사용하여 실행되고 결과를 저장하는 다음 bash 스크립트가 있습니다(예: DA00000). 이를 위해 bash 스크립트 파일을 내보내야 합니다.
별도의 bash 스크립트를 사용하면 안 됩니다.
다음 스크립트를 한 줄의 명령으로 어떻게 작성할 수 있습니까?
따라서 이 명령을 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
나는 두 가지 패스를 생각해 냈습니다.
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");