8

I am trying to compile a linux written program under windows (I use mingw)

void make_directory(const char* name) {
  mkdir(name1, name2);
}

There is an error:

Too Many Arguments to function 'int mkdir(const char*)'

Any idea to solve this?

4

3 回答 3

7

对于在 mingw-w64 下构建的 Linux 编写程序,我设法摆脱了这一点:

#if (defined(_WIN32) || defined(__WIN32__))
#define mkdir(A, B) mkdir(A)
#endif
于 2016-05-30T08:17:28.697 回答
6

正如评论中所说,mkdir()只接受一个论点。但是,由于不推荐使用此功能,您应该改用 _mkdir()

int _mkdir(const char *dirname); 
int _wmkdir(const wchar_t *dirname); /* for wide-character */

如果您希望在两个系统(linux / mingw)上使用您的功能:

void make_directory(const char* name)
{
#ifdef __linux__
    mkdir(name, 777); /* Or what parameter you need here ... */
#else
    _mkdir(name);
#endif
}

编辑:

MinGW 实现:

_mkdir():

_CRTIMP int __cdecl __MINGW_NOTHROW _mkdir (const char*);

mkdir():

_CRTIMP int __cdecl __MINGW_NOTHROW mkdir (const char*);

两者都在 中指定io.h,但我想最好包括在内direct.h(包括io.h在它的一部分中)。

于 2013-01-07T16:14:22.270 回答
3

我假设name1name2都是您要创建的目录的名称(但见下文)。

mkdir()创建(或尝试创建)单个目录。如果要创建两个目录,则需要调用mkdir()两次。

更令人困惑的是,POSIXmkdir()函数实际上有两个参数——但第二个参数不是名称。引用我系统上的手册页:

#include <sys/stat.h>
#include <sys/types.h>

int mkdir(const char *pathname, mode_t mode);

ollo 的答案中提到的_mkdir()函数是特定于 Microsoft Windows 的,它需要一个参数;模式(即权限)在 Windows 上的工作方式与在 POSIX(Unix、Linux 等)系统上的工作方式不同。

但是你的编译器显然认为mkdir()它只需要一个参数,这让人想知道它为什么这么认为。你用什么头文件#include来获得mkdir函数的声明?

正如我上面提到的,POSIXmkdir()接受两个参数,但第二个是 a mode_t,而不是名称。你说代码最初是为 Linux 编写的。参数是否真的称为name1and name2,或者您是否尝试通过更改名称来简化代码?您能否更新问题以向我们展示实际的复制和粘贴代码?

于 2013-01-07T16:40:56.957 回答