我正在开发一个C++
库,其中包含一段shell script
代码,用于返回特定串行端口的名称。当我在控制台X64桌面或Arm环境中运行此脚本时,脚本会返回正确的答案。我在库中执行相同的脚本时出现问题,返回显示错误形成的字符串,如ÈÛT¶ÈÛT¶¨a
,但预期为/dev/ttyACM0
。
在库中运行的脚本:
脚本
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;
答案 0 :(得分:0)
除此之外,你没有在C ++代码中包含结果和来源。你选择了最难的方法来做到这一点。在库中运行shell脚本的代码很可能只会导致头痛。
基本上,您可以为设备创建udev
规则,以便在/ dev中创建一个唯一且稳定的文件来访问它。您可以在ArchWiki
KERNEL=="video[0-9]*", SUBSYSTEM=="video4linux", SUBSYSTEMS=="usb", ATTRS{idVendor}=="05a9", ATTRS{idProduct}=="4519", SYMLINK+="video-cam1"