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中通过unix系统命令打开图像文件_C_Unix - Fatal编程技术网

在C中通过unix系统命令打开图像文件

在C中通过unix系统命令打开图像文件,c,unix,C,Unix,我有一个项目,用户可以通过在菜单中选择来打开文件。 我有两段几乎相同的代码,但其中一段有效,而另一段无效: 有效的方法是通过gedit chemin打开文本文件,其中包含文件路径: char buf[200]; snprintf(buf,sizeof(buf),"gedit %s",chemin); system(buf); 这一个在我的代码中运行时不起作用,但在它之外运行时确实起作用。使用eog打开.jpg文件-也尝试了xdg,但没有任何改进: snprintf(buf,sizeof(buf

我有一个项目,用户可以通过在菜单中选择来打开文件。 我有两段几乎相同的代码,但其中一段有效,而另一段无效: 有效的方法是通过gedit chemin打开文本文件,其中包含文件路径:

char buf[200];
snprintf(buf,sizeof(buf),"gedit %s",chemin);
system(buf);
这一个在我的代码中运行时不起作用,但在它之外运行时确实起作用。使用eog打开.jpg文件-也尝试了xdg,但没有任何改进:

snprintf(buf,sizeof(buf),"eog %s",chemin);
system(buf);
是否有更可靠的方法从unix命令行打开.jpg文件?还是我忘了什么? 短暂性脑缺血发作

更新 缓冲区似乎只将其前7个字符打印到命令行,即: 我的文件路径:./FICHIER\u PROJET/basededonnee/basededonnefichier/IMG\u RGB/21.jpg 命令行打印的内容:eog./FI
这只会发生在这些.jpg文件中。问题可能来自字符'\0',该字符的位置不正确,请尝试以下操作:

strncpy(buf, "eog ", 4);
strncat(buf, chemin, sizeof(chemin));
buf[4+sizeof(chemin)] = '\0';
if(system(buf) == -1){
    perror("Error with the system call ");
    exit(-1);
}

解决了它。。。我的所有系统命令都使用了一个通用缓冲区。我为这一个创建了一个新的缓冲区,它可以正常工作。

请描述到底是什么不起作用。@jessica,请确保buf具有有效的可执行命令cmd,然后在系统之前打印buf。另外,检查系统的返回值。您是否尝试过打印buf的内容,控制台是否也注意到任何后续新行,并将控制台输出复制粘贴到终端?@arrowd命令已运行,但未打开任何内容没有特定错误消息seg faults etcIt可能是路径问题。尝试提供eog的完整路径。