Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c语言-system()函数在我设置程序自动运行时不起作用_C_Linux - Fatal编程技术网

c语言-system()函数在我设置程序自动运行时不起作用

c语言-system()函数在我设置程序自动运行时不起作用,c,linux,C,Linux,我正在尝试在Linux中制作幻灯片程序。我的问题是,当我设置程序自动运行时,mplayer可以工作并运行视频,但eog或feh不能显示图像。但当我从终端调用我的程序并显示视频和图像时,它就工作了 这是我的system()调用代码 阅读。它分叉了一些/bin/sh-c,所以请阅读。使用by或其内部shell等效项搜索命令 因此,您的$PATH或默认路径中找不到eog,或者它无法显示,例如,因为缺少一些$display(例如,由eog间接调用的某些路径需要)。也许您可以用shell脚本替换eog(在

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

这是我的system()调用代码

阅读。它分叉了一些
/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);
}