Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/69.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_System - Fatal编程技术网

如何在c中获取system()命令的状态

如何在c中获取system()命令的状态,c,system,C,System,我想获取作为参数传递给system()函数的命令的状态。假设我将“attrib+he:/songs/lovinsong.mp3”作为系统传递(“attrib+he:/songs/lovinsong.mp3”),因为我知道我给出的路径不正确,即在我的E:drive中没有这样的文件夹songs,所以在控制台上,它说找不到路径。 如何在我的c程序或任何状态代码中获取“path not found”消息,以便知道该命令不起作用 /* system example : DIR */ #include &l

我想获取作为参数传递给system()函数的命令的状态。假设我将“attrib+he:/songs/lovinsong.mp3”作为系统传递(“attrib+he:/songs/lovinsong.mp3”),因为我知道我给出的路径不正确,即在我的E:drive中没有这样的文件夹songs,所以在控制台上,它说找不到路径。 如何在我的c程序或任何状态代码中获取“path not found”消息,以便知道该命令不起作用

/* system example : DIR */
#include <stdio.h>      /* printf */
#include <stdlib.h>     /* system, NULL, EXIT_FAILURE */

int main ()
{
  int i;
  printf ("Checking if processor is available...");
  if (system(NULL)) puts ("Ok");
    else exit (EXIT_FAILURE);
  printf ("Executing command DIR...\n");
  i = system ("attrib +h E:/songs/lovingsong.mp3");
  //want to get status here
  printf ("The value returned was: %d.\n",i);
  return 0;
}
/*系统示例:DIR*/
#包括/*printf*/
#包括/*系统,空,退出\u故障*/
int main()
{
int i;
printf(“检查处理器是否可用…”);
如果(系统(空))放入(“确定”);
否则退出(退出失败);
printf(“正在执行命令目录…\n”);
i=系统(“attrib+he:/songs/lovinsong.mp3”);
//想在这里获得身份吗
printf(“返回的值为:%d.\n”,i);
返回0;
}

请注意,C11标准(read)在§7.22.4.8中定义了
系统
(其形式参数称为以下字符串):

如果字符串是空指针,
系统
函数确定主机环境是否有命令处理器。如果字符串不是空指针,
系统
函数将字符串指向的字符串传递给该命令处理器,以便以实现应记录的方式执行;这可能会导致程序调用
系统
以不合规的方式行事或终止

因此,根据C11标准,
system
的功能没有明确的定义。您需要深入了解特定C11实现的文档

在POSIX(例如Linux或MacOSX)上,
系统
将运行POSIX外壳
/bin/sh
,参数后接字符串,并且有一个复杂的章节描述什么是POSIX外壳

也许您想将一个命令传递给stdout,该命令是
attrib
的stderr,并读取由
attrib
命令生成的stdout。在POSIX上,您可以使用(与
pclose
)来实现此目的。也许(而且)您的实现也有类似的功能:
\u popen
。您还需要阅读
attrib
命令的文档

所以你的问题很具体。您需要深入了解特定操作系统的文档

您可以简单地测试(在运行
system
之前)文件
E:/songs/lovinsong.mp3
是否存在。可能使用(如果在运行
attrib
之前删除了该文件,则可能带有竞争条件)

也要意识到这一点


另外,我不知道关于什么,但是你没有用Windows标记你的问题。

仅仅因为问题没有标记Windows并不意味着你不知道你的答案有一半与OP完全无关。我的答案提到
popen
(即使有到Windows文档的链接)这可能就是OP想要的。我想这很公平。我只是觉得Windows可能会有所不同,至少应该更突出。不要提到“操作系统特定”足够了吗?你可能想直接使用(它是什么代码< ATTIB < /代码>可能在内部做)。它看起来比简单的
系统
更复杂,但也可能比解析
attrib
命令的stderr和stdout更复杂。