我正在开发一个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