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