ファイルのパーミッションの八進数が苦手である。
7が全部許可な事はわかる。
rwx の順番なのもわかる。
が、そこから 1 bit でもずれると『そもそも read は下の桁だっけ一番上の桁だっけ?』となる。
変換スクリプトを書こうと思った。
パーミッションといえば 755 とかよく出てくるから 7gogo.jp にあやかって会いにいけるプログラムにしよう(謎)
そして何故か C で書いた。
これでも元ゲームプログラマーで C++ をメインに使っていたのだが、最近はお仕事が Java やら Ruby やらが多くて
C を書く機会はほんとになくなっている。
まあ、たまにはリハビリだ。
make も何も要らない C のソース一個で完結だ。
// nanagogo.c - octal permission number to string expression converter // // Copyright (c) 2016 Takel Hinomoto // This file is provided under the MIT license. // // To compile: $ cc nanagogo.c -o nngg // To execute: $ ./nngg 755 // or: $ mv nngg ~/bin; nngg 755 #include <stdio.h> #include <errno.h> static const char* stringExpressionTable[] = { "---", "--x", "-w-", "-wx", "r--", "r-x", "rw-", "rwx", }; int main(int argc, const char** argv) { if (argc < 2) { fprintf(stderr, "missing argument.\n"); return -1; } const char* permissionNumber = argv[1]; errno = 0; char* pEndCh = NULL; unsigned long value = strtoul(permissionNumber, &pEndCh, 8); if ((errno != 0) || (*pEndCh != '\0')) { fprintf(stderr, "permission value must be octal number.\n"); return -1; } if (value > 0777) { fprintf(stderr, "octal permission value too big.\n"); return -1; } int others = (int)(value & 7); int group = (int)((value >> 3) & 7); int owner = (int)((value >> 6) & 7); fprintf(stdout, "%s%s%s\n", stringExpressionTable[owner], stringExpressionTable[group], stringExpressionTable[others]); return 0; }
ていうかものすごい車輪の再発明な可能性があるが調べてない。