/proc 파일 시스템에서 "파일"처럼 작동하는 사용자 정의 파일을 구현하는 방법이 있습니까?

/proc 파일 시스템에서 "파일"처럼 작동하는 사용자 정의 파일을 구현하는 방법이 있습니까?

지속성 명명된 파이프와 같은 것을 찾고 있습니다... cat 또는 grep을 여러 번 사용할 수 있으며 항상 파이프에 공급하는 모든 프로세스의 현재 상태를 얻을 수 있습니다.

/tmp/timestamp예를 들어, 명명된 파이프를 만들고 다음 date을 사용하여 쓴다고 가정해 보겠습니다 .

mkfifo /tmp/timestamp
date --iso-8601=seconds > /tmp/timestamp

이 시점에서 쌍에 대한 호출은 date차단되고 /tmp/timestamp읽기를 기다립니다...

cat `/tmp/timestamp`

차단이 차단 해제 되고 stdout에 쓰는 것과 date같은 내용이 표시된 다음 종료됩니다.2017-03-18T16:11:54-04:00date

...하지만 매번 날짜를 업데이트하고 싶다면 어떻게 해야 할까요 cat /tmp/timestamp?

그럴 수도 있을 것 같아요

while :; date --iso-8601=seconds > /tmp/timestamp; done

작동하겠지만 a) 이 접근 방식에 명백하지 않은 문제가 있는지, b) 루프가 필요하지 않은 방법이 있는지 궁금합니다.

또한 FIFO를 항상 사용할 수 있도록 자동으로 시작되도록 설정하고 싶습니다.

내가 이것을 파이프라인에 넣고 싶은 이유는 관련 정보가 웹 애플리케이션을 지원하는 데이터베이스에 저장되기 때문입니다. 대부분의 기술 지원 직원은 SSH를 통해 서버에 로그인하고 데이터베이스에서 쿼리를 실행하는 것을 기쁘게 생각하지만 몇 가지 중요한 통계가 있습니다.진짜파일에서 간단히 grep하는 것이 편리합니다. 명명된 파이프가 포함된 디렉터리 에 액세스할 수 있으면 ls이러한 항목을 모두 검색할 수 있게 됩니다. 본질적으로 해야 하기 때문에 이 작업을 수행하는 것이 아니라 좋은 비유라고 생각하기 때문에 수행하는 것입니다.

답변1

사용자 정의 파일 시스템을 커널 모듈로 구현하거나 회로 차단기를 사용할 수 있습니다. 해당 사용자 정의 파일 시스템 내에서 원하는 가상 파일을 가질 수 있습니다.

답변2

이는 루프의 "명백한 문제"입니다. 읽기 프로세스가 fifo를 열어 둔 경우(예를 들어 다른 파일을 여는 동안 차단되거나 정지되기 때문에) 쓰기 루프는 계속해서 실행됩니다(fifo 버퍼가 가득 찰 때까지). 여러 동시 판독기에는 문제가 있지만 아마도 해당 가능성을 합리적으로 제거할 수 있습니다.

비루프 솔루션의 경우 fifo 대신 소켓을 사용할 수 있지만 (간단한) 판독기 프로그램(또는 해당 프로그램 이외의 것을 실행하려면 파이프)을 작성 cat해야 합니다 open.

관련 정보