我想得到我作为参数传递给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;
}
答案 0 :(得分:1)
请注意,C11标准(读n1570)在§7.22.4.8中定义system
(其正式参数在下面称为 string ):
如果 string 是空指针,
system
函数将确定主机环境是否具有命令处理器。如果 string 不是空指针,则system
函数将 string 指向的字符串传递给该命令处理器,以执行方式执行文献;这可能会导致程序调用system
以不合规的方式行事或终止
因此,根据C11标准,system
所做的事情没有明确的定义。您需要深入了解特定C11实现的文档。
在POSIX(例如Linux或MacOSX)上,system
为required运行带有/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标记您的问题。