Closed. This question is off-topic。它当前不接受答案。
想改善这个问题吗? Update the question,所以它是on-topic,用于堆栈溢出。
2年前关闭。
我到处搜寻,但找不到解决问题的答案。
我正在交叉编译beagle bone black的C ++应用程序,并希望使用linux system()函数,如下所示:
系统(“ echo DM-GPIO-Test> $ SLOTS”);
它是添加设备覆盖以控制GPIO引脚。当直接在比格犬骨骼的终端上从任何地方执行时,echo命令“ echo DM-GPIO-Test> $ SLOTS”可以正常工作。 SLOTS是我定义的环境变量,并且DM-GPIO-Test-00A0.dtb0在/ lib / firmware中
但是在执行c ++应用程序时出现以下错误:
“ sh:1:无法创建:目录不存在”
像我一样调用系统函数是否不正确?
提前致谢
请注意,程序的环境-假设它是由其他实用程序启动的(或从init或systemd启动)-可能与交互式环境不同(并且较小)。
也许您的
因此,我建议定义一些配置文件的格式并进行解析,然后从中获取
想改善这个问题吗? Update the question,所以它是on-topic,用于堆栈溢出。
2年前关闭。
我到处搜寻,但找不到解决问题的答案。
我正在交叉编译beagle bone black的C ++应用程序,并希望使用linux system()函数,如下所示:
系统(“ echo DM-GPIO-Test> $ SLOTS”);
它是添加设备覆盖以控制GPIO引脚。当直接在比格犬骨骼的终端上从任何地方执行时,echo命令“ echo DM-GPIO-Test> $ SLOTS”可以正常工作。 SLOTS是我定义的环境变量,并且DM-GPIO-Test-00A0.dtb0在/ lib / firmware中
但是在执行c ++应用程序时出现以下错误:
“ sh:1:无法创建:目录不存在”
像我一样调用系统函数是否不正确?
提前致谢
最佳答案
system("echo DM-GPIO-Test > $SLOTS");
这闻起来很臭,应该避免。
您可能想要的是在SLOTS
环境变量给定的文件中写入字符串(请参见environ(7))。对于该特定用途,您无需派生任何/bin/sh
进程(system(3)就是这样做)。您可以简单地使用getenv(3)获取该环境变量。
因此,您可以尝试:
const char*slotspath = getenv("SLOTS");
if (!slotspath) {
fprintf(stderr, "no SLOTS\n");
exit(EXIT_FAILURE);
}
FILE* fslots = fopen(slotspath, "w");
if (!fslots) { perror(slotspath); exit(EXIT_FAILURE); };
fputs("DM-GPIO-Test\n", fslots);
fclose(fslots), fslots = NULL;
请注意,程序的环境-假设它是由其他实用程序启动的(或从init或systemd启动)-可能与交互式环境不同(并且较小)。
也许您的
slotspath
不应来自您的环境,而应来自/etc/
下的某些配置文件(程序应对其进行解析)或某个程序参数。因此,我建议定义一些配置文件的格式并进行解析,然后从中获取
slotspath
。08-16 23:08