access

ファイルのアクセス権限をチェックするにはaccessを使う。

Man page of ACCESS

呼び出し元プロセスから見てアクセスできるかを判定する模様。
(基本的に実行したユーザってことかな・・・。)

test.txtを普通に作った時のアクセス権限をチェックする。

第2引数が、R_OKで読み込みのみチェック、W_OKで書き込みのみチェック、X_OKで実行のみのチェック。

$ pwd
/home/bg1/project/cloud/github.com/Sample/unixsyscall/access/access/src/access
$ vi access.c
$ gcc access.c -o access
$ vi test.txt
$ ls -al
合計 36
drwxrwxr-x. 2 bg1 bg1  4096  9月 29 19:12 .
drwxrwxr-x. 3 bg1 bg1  4096  9月 29 18:59 ..
-rwxrwxr-x. 1 bg1 bg1 18384  9月 29 19:12 access
-rw-rw-r--. 1 bg1 bg1  1470  9月 29 19:12 access.c
-rw-rw-r--. 1 bg1 bg1     6  9月 29 19:12 test.txt
$ ./access
Read OK
Write OK
Exec NG
$

test.txtは664なので、読み込み書き込みは可能だが実行はできない。

Sample/unixsyscall/access/access/src/access at master · bg1bgst333/Sample · GitHub

unlink

ファイルの削除はunlinkで行う。

Man page of UNLINK

シンボリックリンクや、名前付きパイプなど、ファイルシステム上名前の付いているものは削除できる。
というか名前を削除して、その名前が参照しているファイル実体も削除するといったほうがいいかな・・・。

成功なら0が返る。

$ vi unlink.c
$ gcc unlink.c -o unlink
$ ls
unlink  unlink.c
$ vi test1.txt
$ cat test1.txt
ABCDE
$ ls
test1.txt  unlink  unlink.c
$ ./unlink
unlink test1.txt success!
$ ls
unlink  unlink.c
$ ./unlink
unlink test1.txt failed!
$

test1.txtがある場合は削除できるし、それを削除した後にもう1回やったら今度は失敗する。

Sample/unixsyscall/unlink/unlink/src/unlink at master · bg1bgst333/Sample · GitHub

mknod

mknodで空のファイルを作成する。

Man page of MKNOD

通常ファイルも特殊ファイル(名前付きパイプやデバイスやソケットなど)も作成できる。

今回は"test.txt"とパイプ"TEST1"を作成する。
ファイル名、そして付与するパーミッションを指定。
バイスの場合、第3引数を使うが、今回は関係ないので0にしている。

$ pwd
/home/bg1/project/cloud/github.com/Sample/unixsyscall/mknod/mknod/src/mknod
$ vi mknod.c
$ gcc mknod.c -o mknod
$ ls
mknod  mknod.c
$ ./mknod
create test.txt success!
create TEST1 success!
$ ls -al
合計 32
drwxrwxr-x. 2 bg1 bg1  4096  9月 29 08:11 .
drwxrwxr-x. 3 bg1 bg1  4096  9月 29 07:37 ..
prwxrwxr-x. 1 bg1 bg1     0  9月 29 08:11 TEST1
-rwxrwxr-x. 1 bg1 bg1 18888  9月 29 08:10 mknod
-rw-rw-r--. 1 bg1 bg1  1203  9月 29 08:10 mknod.c
-rwxrwxr-x. 1 bg1 bg1     0  9月 29 08:11 test.txt
$ vi test.txt
$ cat test.txt
ABCDE
$

確かにtest.txtもパイプTEST1もできてる。

Sample/unixsyscall/mknod/mknod/src/mknod at master · bg1bgst333/Sample · GitHub

symlink

symlinkはシンボリックリンクを作成する。

Man page of SYMLINK

シンボリックリンクが指し示すファイルパス、そしてシンボリックリンク名を指定する。

成功すると0が返る。

$ pwd
/home/bg1/project/cloud/github.com/Sample/unixsyscall/symlink/symlink/src/symlink
$ vi symlink.c
$ mkdir test1
$ cd test1/
$ vi test1.txt
$ cat test1.txt
ABCDE
$

まずは、ディレクトリtest1を作成し、その下にtest1.txtを作成し、文字列を書いておく。

$ cd ..
$ ls
symlink.c  test1
$ gcc symlink.c -o symlink
$ ls
symlink  symlink.c  test1
$ ./symlink
create test1_symlink success!
$ ls
symlink  symlink.c  test1  test1_symlink
$

上がってコンパイルしてsymlinkでシンボリックリンクtest1_symlinkを作成。

$ ls -al
合計 36
drwxrwxr-x. 3 bg1 bg1  4096  9月 29 07:19 .
drwxrwxr-x. 3 bg1 bg1  4096  9月 29 07:04 ..
-rwxrwxr-x. 1 bg1 bg1 18440  9月 29 07:18 symlink
-rw-rw-r--. 1 bg1 bg1   856  9月 29 07:16 symlink.c
drwxrwxr-x. 2 bg1 bg1  4096  9月 29 07:18 test1
lrwxrwxrwx. 1 bg1 bg1    15  9月 29 07:19 test1_symlink -> test1/test1.txt
$ cat test1_symlink
ABCDE
$ vi test1_symlink
$ cat test1_symlink
ABCDE
XYZ
$ cat test1/test1.txt
ABCDE
XYZ
$

test1_symlinkがtest1/test1.txtを指しているのがわかるので、test1_symlink側を修正しても、test1/test1.txt側に反映されている。

$ mkdir test2
$ ls
symlink  symlink.c  test1  test1_symlink  test2
$ mv test1/test1.txt test2/test1.txt
$ ls test2/
test1.txt
$ cat test1_symlink
cat: test1_symlink: No such file or directory
$ ls -al
合計 40
drwxrwxr-x. 4 bg1 bg1  4096  9月 29 07:22 .
drwxrwxr-x. 3 bg1 bg1  4096  9月 29 07:04 ..
-rwxrwxr-x. 1 bg1 bg1 18440  9月 29 07:18 symlink
-rw-rw-r--. 1 bg1 bg1   856  9月 29 07:16 symlink.c
drwxrwxr-x. 2 bg1 bg1  4096  9月 29 07:22 test1
lrwxrwxrwx. 1 bg1 bg1    15  9月 29 07:19 test1_symlink -> test1/test1.txt
drwxrwxr-x. 2 bg1 bg1  4096  9月 29 07:22 test2
$

ディレクトリtest2を作成して、そこにtest1.txtを移動すると、test1_symlinkにアクセスしようとしても、実体であるtest1.txtが存在しないのでエラーになる。
シンボリックリンクは実体を指さないので、リンク先はそのままである。

Sample/unixsyscall/symlink/symlink/src/symlink at master · bg1bgst333/Sample · GitHub

mkdir

mkdirはディレクトリを作成する。

Man page of MKDIR

ディレクトリを作成するときに、アクセス権限も指定する。

これで、

$ vi mkdir.c
$ gcc mkdir.c -o mkdir
$ ls
mkdir  mkdir.c
$ ./mkdir
mkdir success!
$ ls
mkdir  mkdir.c  test_dir
$ ls -al
合計 36
drwxrwxr-x. 3 bg1 bg1  4096  9月 28 23:46 .
drwxrwxr-x. 3 bg1 bg1  4096  9月 28 23:27 ..
-rwxrwxr-x. 1 bg1 bg1 18384  9月 28 23:46 mkdir
-rw-rw-r--. 1 bg1 bg1   780  9月 28 23:44 mkdir.c
drwxrwxr-x. 2 bg1 bg1  4096  9月 28 23:46 test_dir
$ pwd
/home/bg1/project/cloud/github.com/Sample/unixsyscall/mkdir/mkdir/src/mkdir
$ cd test_dir
$ pwd
/home/bg1/project/cloud/github.com/Sample/unixsyscall/mkdir/mkdir/src/mkdir/test_dir
$ ls
$ vi test.txt
$ cat test.txt
ABCDE
$ ls
test.txt
$

mkdirバイナリでディレクトリtest_dirを作成できたし、その下にtest.txtを作って文字列を書き込めた。
ただ、権限はユーザ、グループ、その他、すべて書き込み可にしているが、実際test_dirは775(その他は書き込み不可)なんだよなあ・・・。
いずれ調べるか・・・。

Sample/unixsyscall/mkdir/mkdir/src/mkdir at master · bg1bgst333/Sample · GitHub

rename

renameは、ファイル名の変更や移動に使う。

Man page of RENAME

ファイル名"test.txt"を"test1.txt"に変更する。

これで、

$ vi rename.c
$ gcc rename.c -o rename
$ ls
rename  rename.c
$ vi test.txt
$ cat test.txt
ABCDE
$ ls
rename  rename.c  test.txt
$ ./rename
rename success!
$ ls
rename  rename.c  test1.txt
$ cat test1.txt
ABCDE
$ ls
rename  rename.c  test1.txt
$ ./rename
rename failed!
$

test.txtがある時はリネームに成功し、test1.txtになる。
しかし、その次はtest.txtが無いのでリネームに失敗する。

Sample/unixsyscall/rename/rename/src/rename at master · bg1bgst333/Sample · GitHub

2019年の振り返り

2019年はお世話になりました。
2020年もよろしくお願いいたします。

もうすでにこれを書いてる時は明けているんですが・・・。

兄の急逝

まずは、2019年、振り返ると、ここでも書かなかったのですが、やはり兄が8月7日に亡くなったのが大きいです。
喪中ですので新年のご挨拶はご遠慮ください。
あの頃は突然のことで、僕も早朝飛び起きてびっくりしました。
オリンピックのチケットが当たった時に、「なんでお前だけ当たるんだよ」と言われました。
それが、facebookで兄と会話した最後の言葉でした。
棺で最初に対面した時、「どうすんだよチケット・・・」と言いました。
葬儀、四十九日と済みまして、だいぶ整理されてきましたが、いまだ遺品の整理が残っています。
まあ、とにかく、PC、ガジェット、本などのが物凄い量がありました。
SIMとかクラウドファンディングの契約なども問い合わせるのが大変で、高齢な父もだいぶ苦労していました。
だいぶ減ってきましたけど、まだまだあります。
最近届いたものだと、


こういうものとか・・・。
別のスマートウォッチの方は父が返品したらしいですが、こっちは僕も欲しいのでこちらで供養させていただこうかと。
とにかくこういうガジェットがたくさん積まれていました。

無職そして再就職

2018年にフリービットを退職して、2019年1月は無職だったのですが、2019年2月からエンタップで働いています。
11か月いろんなことがありましたが、まあとにかくいろんな分野の技術に触れました。

体調

あまりいいとは言えません。
ただ、その中でも1日1万とか1ヶ月30万とか歩いてます。
リングフィットアドベンチャーが買えないのでウォークフィットアドベンチャーしています。
この前、計ったら3キロ減ったので継続したいしもっと運動量を増やしたいですね。

最後に

2020年の豊富は、2020年の記事で書きたいと思います。
2020年はオリンピックイヤーです。
2020年も重ねてよろしくお願いいたします。