gpt4 book ai didi

c 语言 - 当我设置程序与主管一起自动运行时,system() 函数不起作用

转载 作者:行者123 更新时间:2023-11-30 19:33:04 24 4
gpt4 key购买 nike

我正在尝试在 Linux 中制作幻灯片程序。我的问题是,当我使用主管设置程序自动运行时,mplayer 可以工作并运行视频,但 eog 或 feh 无法显示图像。但当我从终端调用我的程序并显示视频和图像时,它正在工作。

这是我的 system() 调用代码。

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);
}

最佳答案

阅读system(3) 。它 fork 了一些 /bin/sh -c,因此请阅读 sh(1p)然后bash(1) 。使用 $PATH 搜索命令通过 execvp(3)或其内壳等效物。

因此,要么在您的 $PATH 或默认路径中找不到 eog,要么无法显示,例如因为缺少一些 $DISPLAY (例如,由 eog 间接调用的一些 XOpenDisplay(3) 需要)。也许您可以用 shell 脚本替换 eog(在运行 eog 之前重定向其 stderr)。

您需要了解更多内容,因此请阅读 Advanced Linux Programming (可免费下载)。例如,childpid = getpid() + 2;(或pid_t上的任何算术)完全是无意义的。 fork system call是必要的,但很难理解。至少查看fork(2) , execve(2) , waitpid(2) ,也许pipe(7)

您可以使用调试器来调试您的程序。小心gdb可以处理fork

顺便说一句,使用kill通过 system(3)作为一个命令是一个错误。您想要kill(2)系统调用,但您可能不需要它。另请参阅signal(7) .

关于c 语言 - 当我设置程序与主管一起自动运行时,system() 函数不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46404330/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com