Windows 中 S_IFREG 的对应内容是什么?

Windows 中 S_IFREG 的对应内容是什么?

我正在用 C 编写一些代码,遇到了一个问题 - 即使我已经sys/stats.h定义了标题,当我使用时S_IFREG,它也会给我错误“使用未声明的标识符” S_IFREG。在谷歌搜索后,它告诉我这不是可以在 Windows 上使用的东西,而我使用的是 Windows。我找不到在 Windows 上等效的东西的明确答案,所以我想知道是否有人可以帮助我。这是我的代码:

int function( command_t* p_cmd ) {


char path[MAX_ARG_LEN];
    strcpy(path, getenv("PATH"));

    char *token = strtok(path, ":");

    while(token != NULL){
        char parameter[MAX_ARG_LEN];
        strcpy(parameter, token);
        strcat(parameter, "/");
        strcat(parameter, p_cmd->argv[0]);

        struct stat buffer;
        int exists;

        exists = stat(parameter, &buffer);
        if(exists == 0 && (S_IFREG & buffer.st_mode)){
            strcpy(p_cmd->argv[0] , parameter);
            return 1; 
        }

        token = strtok(NULL, ":");
    }

    return 0;
}

这些是我正在使用的标题,我无法改变它们来添加额外的库。

#include <ctype.h>
#include <errno.h>
#include <fcntl.h>
#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>

我还无法改变参数或使用任何扩展。

答案1

答案从编辑移至问题:


本质上,现代 POSIX 兼容系统需要 S_IFMT 和 S_IFREG 值,但 POSIX.1-1990 不需要,实际上禁止您包含它们。在我的第一段代码中,我手动屏蔽以检查文件:

(S_IFREG & buffer.st_mode)

但是 POSIX 兼容系统提供的宏已经为您完成了这个,所以代码应该是:

S_ISREG(buffer.st_mode)

相关内容