C语言中access/_access函数的使用实例详解-创新互联

在Linux下,access函数的声明在文件中,声明如下:

老河口网站建设公司成都创新互联,老河口网站设计制作,有大型网站制作公司丰富经验。已为老河口近1000家提供企业网站建设服务。企业网站搭建\外贸网站制作要多少钱,请找那个售后服务好的老河口做网站的公司定做!

int access(const char *pathname, int mode);

access函数用来判断指定的文件或目录是否存在(F_OK),已存在的文件或目录是否有可读(R_OK)、可写(W_OK)、可执行(X_OK)权限。F_OK、R_OK、W_OK、X_OK这四种方式通过access函数中的第二个参数mode指定。如果指定的方式有效,则此函数返回0,否则返回-1。

在Windows下没有access函数,但在文件中有_access函数,声明如下:

int _access(const char* _Filename, int _AccessMode);

windows下的函数_access与linux下的access函数功能类似,用来判断指定的文件或目录是否仅存在(00),已存在的文件或目录是否有仅读(04)、仅写(02)、既可读又可写(06)权限。这四种方式通过_access函数中的第二个参数mode指定,如果mode传入的值不是0或2或4或6,调用此函数则会crash。如果指定的方式有效,则此函数返回0,否则返回-1。

以下是测试代码(access.cpp):

#include "access.hpp"
#include 
#include 
#include 
#ifdef _MSC_VER
#include 
#else
#include 
#endif
namespace access_ {
int test_access_1()
{
#ifdef _MSC_VER
 const std::string path{ "E:/GitCode/Messy_Test/" };
 const std::vector names {"testdata", ".gitignore", "src", "invalid"};
 for (auto& name : names) {
 const std::string tmp = path + name;
 fprintf(stdout, "file or directory name: \"%s\": ", name.c_str());
 if (_access(tmp.c_str(), 0) == 0) fprintf(stdout, "exist, ");
 else fprintf(stdout, "not exist, ");
 
 if (_access(tmp.c_str(), 4) == 0) fprintf(stdout, "only has read premission, ");
 else fprintf(stdout, "does not have read premission, ");
 if (_access(tmp.c_str(), 2) == 0) fprintf(stdout, "only has write premission, ");
 else fprintf(stdout, "does not have write premission, ");
 if (_access(tmp.c_str(), 6) == 0) fprintf(stdout, "has both read and write premission\n");
 else fprintf(stdout, "has neither read nor write premission\n");
 }
#else
 const std::vector names {"testdata", "CMakeLists.txt", "build.sh", "invalid"};
 for (auto name : names) {
 fprintf(stdout, "file or directory name: \"%s\": ", name);
 if (access(name, F_OK) == 0) fprintf(stdout, "exist, ");
 else fprintf(stdout, "not exist, ", name);
 
 if (access(name, R_OK) == 0) fprintf(stdout, "has read premission, ");
 else fprintf(stdout, "does not have read premission, ");
 if (access(name, W_OK) == 0) fprintf(stdout, "has write premission, ");
 else fprintf(stdout, "does not have write premission, ");
 if (access(name, X_OK) == 0) fprintf(stdout, "has execute premission\n");
 else fprintf(stdout, "does not have execute premission\n");
 }
#endif
 return 0;
}
} // namespace access_

另外有需要云服务器可以了解下创新互联建站www.cdcxhl.com,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


当前文章:C语言中access/_access函数的使用实例详解-创新互联
分享地址:http://myzitong.com/article/dssgoh.html