0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

FIFOを少しいじってみる

Posted at

過去の記事においてFIFOの性質を実験的に確かめた。
そこで、本記事において実際にFIFOを動かしてみたいと思う。
この記事を更新するか複数記事に分けて記録する自分用メモである。
なお、筆者の心が折れた場合は完結しない可能性がある。

まず作成。FIFOはファイルに見えるカーネルバッファへのハンドルだ。
形式上はファイルなので作成権限のあるディレクトリなら作成できる。
ターミナルから作成するにはmkfifoコマンドを使う。

user@user-virtual-machine:~/git/fifo$ ll
合計 8
drwxrwxr-x 2 user user 4096  9月 29 02:27 ./
drwxrwxr-x 6 user user 4096  9月 29 02:20 ../
user@user-virtual-machine:~/git/fifo$ mkfifo ./testfifo
user@user-virtual-machine:~/git/fifo$ ll
合計 8
drwxrwxr-x 2 user user 4096  9月 29 02:35 ./
drwxrwxr-x 6 user user 4096  9月 29 02:20 ../
prw-rw-r-- 1 user user    0  9月 29 02:35 testfifo|
user@user-virtual-machine:~/git/fifo$ 

pがパイプであることを示し、デフォルト属性は664のようだ。
形式上はファイルなので削除もできる。

user@user-virtual-machine:~/git/fifo$ ll
合計 8
drwxrwxr-x 2 user user 4096  9月 29 02:35 ./
drwxrwxr-x 6 user user 4096  9月 29 02:20 ../
prw-rw-r-- 1 user user    0  9月 29 02:35 testfifo|
user@user-virtual-machine:~/git/fifo$ rm ./testfifo 
user@user-virtual-machine:~/git/fifo$ ll
合計 8
drwxrwxr-x 2 user user 4096  9月 29 02:38 ./
drwxrwxr-x 6 user user 4096  9月 29 02:20 ../
user@user-virtual-machine:~/git/fifo$ 

プログラムからも作成可能。

f1.cpp
#include	<bits/stdc++.h>
#include	<sys/types.h>
#include	<sys/stat.h>
#include	<fcntl.h>
#include	<unistd.h>

int main(int argc, char* argv[])
{
	//ブロックされないようにNONBLOCK指定で開く
	int fd = open("./testfifo", O_RDONLY | O_NONBLOCK);
	if(fd > 0) {
		printf("./testfifo is already exist.\n");
		close(fd);
	} else {
		int ret = mkfifo("./testfifo",
			S_IRUSR | // ユーザリード権限
			S_IWUSR | // ユーザライト権限
			S_IRGRP | // グループリード権限
			S_IWGRP | // グループライト権限
			S_IROTH   // 他人にリード権限
		);
		if(ret == 0) {
			printf("./testfifo is created successful.\n");
		} else {
			printf("./testfifo is create failed.\n");
		}
	}
	return	0;
}

実行するとこうなる。

user@user-virtual-machine:~/git/fifo$ ll
合計 32
drwxrwxr-x 2 user user  4096  9月 29 02:59 ./
drwxrwxr-x 6 user user  4096  9月 29 02:20 ../
-rwxrwxr-x 1 user user 16920  9月 29 02:55 f1*
-rw-rw-r-- 1 user user   732  9月 29 02:55 f1.cpp
user@user-virtual-machine:~/git/fifo$ ./f1 
./testfifo is created successful.
user@user-virtual-machine:~/git/fifo$ ll
合計 32
drwxrwxr-x 2 user user  4096  9月 29 02:59 ./
drwxrwxr-x 6 user user  4096  9月 29 02:20 ../
-rwxrwxr-x 1 user user 16920  9月 29 02:55 f1*
-rw-rw-r-- 1 user user   732  9月 29 02:55 f1.cpp
prw-rw-r-- 1 user user     0  9月 29 02:59 testfifo|
user@user-virtual-machine:~/git/fifo$ ./f1
./testfifo is already exist.
user@user-virtual-machine:~/git/fifo$ 

とりあえずはここまで。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?