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

时间:2017-11-16 17:00:09

标签: c system

我想得到我作为参数传递给system()函数的命令状态。假设我通过" attrib + h E:/songs/lovingsong.mp3"作为系统(" attrib + h E:/songs/lovingsong.mp3")因为我知道我提供的路径不正确,即我的E:驱动器中没有这样的文件夹歌曲所以在控制台上它说路径没找到。 我怎样才能找到"找不到路径"我的c程序中的消息或任何状态代码,以便我知道该命令不起作用。

/* 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;
}

1 个答案:

答案 0 :(得分:1)

请注意,C11标准(读n1570)在§7.22.4.8中定义system(其正式参数在下面称为 string ):

  

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

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

在POSIX(例如Linux或MacOSX)上,systemrequired运行带有/bin/sh参数后跟字符串的POSIX shell -c 并且有一个复杂的章节描述什么是POSIX shell。

也许您希望将attrib的{​​{3}}命令传递给stdout,并读取attrib命令生成的stdout。在POSIX上,您可以使用redirecting(带pclose)来实现此目的。也许(和popen)你的实现有类似的东西:_popen。您还需要阅读attrib命令的文档。

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

您可能只是测试(运行system之前)文件E:/songs/lovingsong.mp3存在。也许使用operating system(如果在运行attrib之前删除该文件,则可能存在竞争条件)。

还要注意_access

PS。我对$PATH variable一无所知,但您没有用Windows标记您的问题。