c语言-system()函数在我设置程序自动运行时不起作用
我正在尝试在Linux中制作幻灯片程序。我的问题是,当我设置程序自动运行时,mplayer可以工作并运行视频,但eog或feh不能显示图像。但当我从终端调用我的程序并显示视频和图像时,它就工作了 这是我的system()调用代码 阅读。它分叉了一些c语言-system()函数在我设置程序自动运行时不起作用,c,linux,C,Linux,我正在尝试在Linux中制作幻灯片程序。我的问题是,当我设置程序自动运行时,mplayer可以工作并运行视频,但eog或feh不能显示图像。但当我从终端调用我的程序并显示视频和图像时,它就工作了 这是我的system()调用代码 阅读。它分叉了一些/bin/sh-c,所以请阅读。使用by或其内部shell等效项搜索命令 因此,您的$PATH或默认路径中找不到eog,或者它无法显示,例如,因为缺少一些$display(例如,由eog间接调用的某些路径需要)。也许您可以用shell脚本替换eog(在
/bin/sh-c
,所以请阅读。使用by或其内部shell等效项搜索命令
因此,您的$PATH
或默认路径中找不到eog
,或者它无法显示,例如,因为缺少一些$display
(例如,由eog
间接调用的某些路径需要)。也许您可以用shell脚本替换eog
(在运行eog
之前重定向其stderr)
你需要学习更多,所以请阅读(免费下载)。例如childpid=getpid()+2代码>(或pid\t
上的任何算法)完全没有意义。这一点很重要,但很难理解。至少看,也许吧
可以使用调试器调试程序。小心地gdb
可以处理fork
s
顺便说一句,使用kill
thru作为命令是错误的。您需要系统调用,但可能不需要它。另请参见。当您从终端运行程序时,它将继承您的个人设置,最显著的是路径
和显示
环境变量。当主管尝试运行程序时,这些环境变量可能不同。childpid=getpid()+2
什么?!?!请永远不要这样做。了解fork
和exec
。我认为我的路径是静态的,所以它不是从路径开始的,但我不确定是否显示设置。我认为mplayer是基于“-o hdmi”参数工作的。它将视频发送到hdmi,但我找不到任何类似的eog或feh设置。我尝试了“eog-f--display=:0路径”或“display=:0.0 eog-f路径”,但没有成功。如果扩展名是Jpg
,PNG
或GIF
,会发生什么?为什么不使用stricmp
?
if(!strcmp(ext,".JPG") || !strcmp(ext,".jpg") || !strcmp(ext, ".gif") || !strcmp(ext,".png") || !strcmp(ext, ".PNG") || !strcmp(ext, ".GIF"))
{
char command[1000];
snprintf(command, sizeof(command), "eog -f %s%s&", FILE_PATH, liste[counter]);
if(childpid != 0)
{
char kill_command[100];
snprintf(kill_command, sizeof(kill_command), "kill %d", childpid);
system(kill_command);
childpid=0;
}
system(command);
sleep(5);
childpid = getpid() + 2;
exit(EXIT_SUCCESS);
}
else if (!strcmp(ext,".mov") || !strcmp(ext, ".mp4") || !strcmp(ext, ".avi") || !strcmp(ext,".wmv"))
{
if(childpid != 0)
{
char kill_command[100];
snprintf(kill_command, sizeof(kill_command), "kill %d", childpid);
system(kill_command);
childpid=0;
}
char command[1000];
snprintf(command, sizeof(command), "omxplayer -o hdmi -b %s%s", FILE_PATH, liste[counter]);
system(command);
exit(EXIT_SUCCESS);
}