我已经知道fileperms函数返回文件类型和文件权限,但我很难理解文件类型部分。当我在一个.txt文件上使用它时,它返回了以下内容(在将其转换为八进制后)100666,我知道最后4位数字是权限,因此这里的文件类型是剩余的数字,即10,但10意味着该文件是一个符号链接,它不是,因为它是文本文件,应该被视为一个常规文件,应该是零。那么这里的问题是什么,我不应该得到00666作为输出吗?
6kkfgxo01#
在类UNIX操作系统中,文件类型和权限表示为位掩码。fileperms函数将此位掩码作为整数返回。当你把它转换成八进制时,你会得到一个像100666这样的数字,它可以被分解如下:最后三个数字(666)实际上表示文件权限。前导数字(100)表示文件类型和一些附加标志。100666中的10实际上不是十进制的10;八进制是10十进制是8它表示UNIX权限中的常规文件。符号链接有八进制的12(或十进制的10),而不是八进制的10。所以,100666可以这样分解:1.八进制为100(十进制为64)表示它是一个常规文件。
$perms = fileperms('/path/to/your/file.txt'); $perm_octal = substr(sprintf('%o', $perms), -4); // Get the last 4 digits $perm_bits = $perms & 0777; // Isolate permission bits $type_bits = $perms & 0170000; // Isolate type bits
1条答案
按热度按时间6kkfgxo01#
在类UNIX操作系统中,文件类型和权限表示为位掩码。fileperms函数将此位掩码作为整数返回。当你把它转换成八进制时,你会得到一个像100666这样的数字,它可以被分解如下:
最后三个数字(666)实际上表示文件权限。前导数字(100)表示文件类型和一些附加标志。100666中的10实际上不是十进制的10;八进制是10十进制是8它表示UNIX权限中的常规文件。符号链接有八进制的12(或十进制的10),而不是八进制的10。
所以,100666可以这样分解:
1.八进制为100(十进制为64)表示它是一个常规文件。
下面是如何隔离权限位和文件类型位的方法: