无法在Windows 8上使用MinGW执行execl()

时间:2014-02-01 17:00:57

标签: c windows cygwin mingw dos

我有一个文件hello.exe文件路径是D:\test\hello.exe这是一个简单的hello world程序(测试好了)。

我有另一个程序proc.c文件路径为D:\test\proc.c,代码如下:

#include<stdio.h>
#include<stdlib.h>
#include<windows.h>
#include<process.h>
#include<errno.h>
#include<string.h>

main(int argc,char *argv[])
{
int ret;
ret=execl("D:\\test\\hello.exe","D:\\test\\hello.exe");
if(ret==-1)
    printf("%d:\t%s",ret,errno);
}

程序挂起(窗口对话框显示The program has stopped working)!!! 我甚至尝试D:/test/hello.exe作为execl()的参数,但同样...... {/ p>

我哪里错了? 请有人给我正确的语法吗?请使用windows下的MinGW使用process.h的各种功能提供示例代码。 Web教程链接也是可以接受的。

非常感谢你

2 个答案:

答案 0 :(得分:3)

您必须包含一个库,

#include<unistd.h>

因为它是在这个库中定义的所以如果你不包含它,你将得到AN错误。 并更正你的代码,因为你写的“exec”不是execl。

int main()
{

execl("D:/test/hello","D:/test/hello",0);
return 0;
}

答案 1 :(得分:0)

如果您使用警告编译,您会注意到errnoint,但您尝试将其与printf一起用作字符串,这意味着它正在用作指针。内存地址0xFFFFFFF2(或errno的十六进制值)可能无效。

除此之外,您需要使用execl指针结束NULL调用。否则,该函数将继续认为它有更多的命令行参数,所有这些都是字符串,直到它在内存中找到的第一个NULL或直到第一个无效的内存访问,以先到者为准。因为复制字符串涉及取消引用指针,它将读取由未知字节组成的地址,并尝试重复取消引用该地址处的指针。如果指针无法解除引用,意味着无法访问从中读取数据的地址,则会导致程序崩溃。

将来请用-Wall编译。