gpt4 book ai didi

c - MSVCRT 系统函数返回码总是-1

转载 作者:太空宇宙 更新时间:2023-11-04 00:10:49 32 4
gpt4 key购买 nike

什么会导致 MSVCRT system()函数始终返回 -1 错误代码,即使应用程序已成功执行和退出并返回 0 作为其退出代码

我用 TDM-GCC-4.9.2 和 FASM 进行了测试,只调用了 system()并打印返回代码,它们都打印 -1 所以它不是我的开发环境。

还有 errno在调用 system() 后为 0GetLastError返回 18 没有更多文件,这很奇怪。

事实上,我系统上的每个应用程序都使用system()现在总是假设它失败了。

所以这是 MSVCRT 的一个全局性问题,我似乎无法在任何其他机器上重现,我们将不胜感激。

编辑:经过一些调试,system电话 _spawnve依次调用 CreateProcessA然后 WaitForSingleObject .可执行文件终止后调用 GetExitCodeProcess那就是返回 -1 然后被反馈到链中的那个。

编辑 2:经过更多测试后,似乎 system仅当被调用进程返回 0 时才返回 -1,否则返回正确的值。

编辑 3:只是澄清一下,尽管 system返回-1,调用进程执行成功。

编辑 4:这是我的测试源。
总是返回 0 成功的那个:

#include <stdio.h>

int main( int argc, char* argv[argc]) {
printf("success\n");
return 0;
}

总是失败的:

#include <stdio.h>

int main( int argc, char* argv[argc]) {
printf("failure\n");
return 1;
}

调用它的人:

#include <stdlib.h>
#include <stdio.h>

int main( int argc, char* argv[argc]) {
printf( "success == %d %d\n", system("test_success.exe", errno);
printf( "failure == %d %d\n", system("test_fail.exe", errno);
return 0;
}

这个的输出是:

success
success == -1 0
failure
failure == 1 0

编辑 5:自 system电话 _spawnve电话 CreateProcess我都试过了,在调用 cmd /c test_success 时它们都返回 -1但是当调用cmd /c test_fail他们按预期工作。所以这似乎是一个与 system 没有直接关系的更深层次的问题。 .

编辑 6:经过多次讨论后,我更改了 ComSpecC:\Windows\winsxs\amd64_microsoft-windows-commandprompt_31bf3856ad364e35_6.1.7601.17514_none_e932cc2c30fc13b0\cmd.exe现在一切正常!这有点奇怪,因为我使用的是 Intel Core 2 Duo,这可能不是正确的做法,但我仍然满意 :p

最佳答案

我给自己添加了一个答案,因为我认为这已经完成了。

ComSpecC:\Windows\System32\cmd.exe 更改为 C:\Windows\winsxs\amd64_microsoft-windows-commandprompt_31bf3856ad364e35_6.1.7601.17514_none_e932cc2c30fc13b0\cmd.exe 解决了我遇到的所有伪造退出代码问题。

关于c - MSVCRT 系统函数返回码总是-1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29760811/

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