Created
August 11, 2017 14:11
-
-
Save hamidreza-s/aaf17dca3218afeebed2842e17b19678 to your computer and use it in GitHub Desktop.
A module for calculating access mode of unix files based on the mode_t bit-bucket value.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
-module(file_mode_calc). | |
-export([run/0]). | |
-include_lib("kernel/include/file.hrl"). | |
%% source: https://jameshfisher.github.io/2017/02/24/what-is-mode_t.html | |
-define(S_IRWXU, 8#0000700). | |
-define(S_IRUSR, 8#0000400). | |
-define(S_IWUSR, 8#0000200). | |
-define(S_IXUSR, 8#0000100). | |
run() -> | |
FilePath = "/tmp/mode/foo", | |
{ok, #file_info{mode = Mode}} = file:read_file_info(FilePath), | |
ModeBin = integer_to_list(Mode, 2), | |
ModeOct = integer_to_list(Mode, 8), | |
ModeDec = Mode, | |
Read = Mode band ?S_IRUSR, | |
Write = Mode band ?S_IWUSR, | |
Execute = Mode band ?S_IXUSR, | |
ReadWrite = Mode band (?S_IRUSR bor ?S_IWUSR), | |
ReadBin = integer_to_list(Read, 2), | |
WriteBin = integer_to_list(Write, 2), | |
ExecuteBin = integer_to_list(Execute, 2), | |
ReadWriteBin = integer_to_list(ReadWrite, 2), | |
{{mode_bin, ModeBin}, | |
{mode_dec, ModeDec}, | |
{mode_oct, ModeOct}, | |
{read, Read, ReadBin, {bool, ((Mode bsr 8) band 1)}, length(ReadBin)}, | |
{write, Write, WriteBin, {bool, ((Mode bsr 7) band 1)}, length(WriteBin)}, | |
{execute, Execute, ExecuteBin, {bool, ((Mode bsr 6) band 1)}, length(ExecuteBin)}, | |
{read_write, ReadWrite, ReadWriteBin, length(ReadWriteBin)}}. |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment