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:无法创建:目录不存在”

像我一样调用系统函数是否不正确?

提前致谢

最佳答案

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;


请注意,程序的环境-假设它是由其他实用程序启动的(或从initsystemd启动)-可能与交互式环境不同(并且较小)。

也许您的slotspath不应来自您的环境,而应来自/etc/下的某些配置文件(程序应对其进行解析)或某个程序参数。

因此,我建议定义一些配置文件的格式并进行解析,然后从中获取slotspath

08-16 23:08