gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 14:53:13 25 4
gpt4 key购买 nike

我想获取我作为参数传递给 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;
}

最佳答案

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

If string is a null pointer, the system function determines whether the host environment has a command processor. If string is not a null pointer, the system function passes the string pointed to by string to that command processor to be executed in a manner which the implementation shall document; this might then cause the program calling system to behave in a non-conforming manner or to terminate

因此,根据 C11 标准,system 的作用没有明确的定义。您需要深入研究特定 C11 实现的文档。

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

也许您想传递一个命令 redirectingattrib 的 stderr 写入 stdout,并读取 attrib 命令生成的 stdout。在 POSIX 上你可以使用 popen (使用pclose)用于此目的。也许(和 probably )你的实现有类似的东西:_popen。您还需要阅读 attrib 命令的文档。

所以你的问题确实是operating system具体。您需要深入研究特定操作系统的文档。

您可以简单地测试(运行系统之前)文件E:/songs/lovingsong.mp3是否存在。也许使用 _access (如果该文件在运行 attrib 之前被删除,则可能存在竞争条件)。

另请注意 $PATH variable .

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

关于c - 如何在c中获取system()命令的状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47335273/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com