GNU的c语言库其实很强大,但我知道这方面确实学得不多。 最近,我接触了文件访问操作的函数。 我以为只能用高级语言来实现,但我不认为借用glibc用c语言来实现也很容易。 这个函数的声明在io.h上,但网上很多文章都是错误的。 但是,他们说的头文件正好包含io.h文件,所以代码上没有大问题。
有关文件访问模式,io.h文件包含以下宏定义:
/* somedefinesfor _ accessnaccessmode (msdoesn ' tdefinethem,but
* it doesn't seem to hurt to add them ).*/
# definef _ ok0/* checkforfileexistence * /
# definex _ ok1/* checkforexecutepermission.* /
# definew _ ok2/* checkforwritepermission * /
# definer _ ok4/* checkforreadpermission *
从代码的注释可以看出,在Windows系统上这似乎没有用。 显然,该功能是专门为unix-linke系统设计的。 但是,适当的参数应该还可以使用。 只是,结果可能不是我们想要的。
函数的原型如下:
_ crtimp int _ _ cdecl _ access (常数char * _ filename,int _AccessMode ) )。
写测试代码如下所示。
#include'stdio.h '
#include'io.h '
输入主(语音) )。
{
if (访问('./访问_ demo.c ',F_OK )==0) )
{
文件退出! n ';
}
if (访问('./访问_ demo.c ',X_OK )==0) )
{
打印(filecanbeexecuted! n ';
}
if (访问('./访问_ demo.c ',W_OK )==0) )
{
打印(filecanbewritten! n ';
}
if (访问('./访问_ demo.c ',R_OK )==0) )
{
文件验证! n ';
}
返回0;
}
代码编译后程序的执行结果如下。
e : 1 _ workspace 2 _ programme _ language 1 _ clang2017 8 8 gcc access _ demo.c
e : 1 _ workspace 2 _ programme _ language 1 _ clang2017 8 8a
文件退出!
文件扫描be executed!
文件扫描be written!
文件扫描be read!
从上面的结果可以看出,在Windows下其实这个函数只是提供了这样的接口,其实没有相应的功能。