我正在開發一個C++
庫,其中有一段shell script
代碼返回特定串行端口的名稱。當我在控制檯或X64桌面或Arm環境中運行此腳本時,該腳本將返回正確的答案。我在庫內執行相同的腳本時出現問題,返回顯示不良形式的字符串,如ÈÛT¶ÈÛT¶¨a
,但預期爲/dev/ttyACM0
。庫編譯爲體系結構x64,具有ARM架構錯誤
該庫的內部運行腳本:
腳本
bash -c 'for sysdevpath in $(find /sys/bus/usb/devices/usb*/ -name dev);do(syspath="${sysdevpath%/dev}";devname="$(udevadm info -q name -p $syspath)";[[ "$devname" == "bus/"* ]]&& continue;teste="$(udevadm info -q property --export -p $syspath | grep -i "company_name")";if [[ ! -z "${teste// }" && $devname == *"ttyACM"* ]]; then echo "/dev/$devname";fi);done;' 2> /dev/null
下面這段代碼是用來保存腳本返回到一個文件中的內容。
代碼C++
pfFile = fopen(CONFIG_FILE, "w+");
fwrite(result,strlen(result), 1, pfFile);
fclose(pfFile);
return 0;
我不能在'udev'中制定規則,因爲這個庫是用於我們的客戶。 – JulianOliveira
所以,還有另一種方法。將腳本另存爲可執行輸出旁邊的文件。使用'/ proc/self'你可以訪問可執行文件的路徑並在那裏執行shell腳本。出於調試目的,您可以在ssh或串行控制檯上檢查shell腳本的輸出。即使你可以輸出到一個文件 – Ongun