![/proc 파일 시스템에서 "파일"처럼 작동하는 사용자 정의 파일을 구현하는 방법이 있습니까?](https://linux55.com/image/107800/%2Fproc%20%ED%8C%8C%EC%9D%BC%20%EC%8B%9C%EC%8A%A4%ED%85%9C%EC%97%90%EC%84%9C%20%22%ED%8C%8C%EC%9D%BC%22%EC%B2%98%EB%9F%BC%20%EC%9E%91%EB%8F%99%ED%95%98%EB%8A%94%20%EC%82%AC%EC%9A%A9%EC%9E%90%20%EC%A0%95%EC%9D%98%20%ED%8C%8C%EC%9D%BC%EC%9D%84%20%EA%B5%AC%ED%98%84%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%B4%20%EC%9E%88%EC%8A%B5%EB%8B%88%EA%B9%8C%3F.png)
지속성 명명된 파이프와 같은 것을 찾고 있습니다... 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:00
date
...하지만 매번 날짜를 업데이트하고 싶다면 어떻게 해야 할까요 cat /tmp/timestamp
?
그럴 수도 있을 것 같아요
while :; date --iso-8601=seconds > /tmp/timestamp; done
작동하겠지만 a) 이 접근 방식에 명백하지 않은 문제가 있는지, b) 루프가 필요하지 않은 방법이 있는지 궁금합니다.
또한 FIFO를 항상 사용할 수 있도록 자동으로 시작되도록 설정하고 싶습니다.
내가 이것을 파이프라인에 넣고 싶은 이유는 관련 정보가 웹 애플리케이션을 지원하는 데이터베이스에 저장되기 때문입니다. 대부분의 기술 지원 직원은 SSH를 통해 서버에 로그인하고 데이터베이스에서 쿼리를 실행하는 것을 기쁘게 생각하지만 몇 가지 중요한 통계가 있습니다.진짜파일에서 간단히 grep하는 것이 편리합니다. 명명된 파이프가 포함된 디렉터리 에 액세스할 수 있으면 ls
이러한 항목을 모두 검색할 수 있게 됩니다. 본질적으로 해야 하기 때문에 이 작업을 수행하는 것이 아니라 좋은 비유라고 생각하기 때문에 수행하는 것입니다.
답변1
사용자 정의 파일 시스템을 커널 모듈로 구현하거나 회로 차단기를 사용할 수 있습니다. 해당 사용자 정의 파일 시스템 내에서 원하는 가상 파일을 가질 수 있습니다.
답변2
이는 루프의 "명백한 문제"입니다. 읽기 프로세스가 fifo를 열어 둔 경우(예를 들어 다른 파일을 여는 동안 차단되거나 정지되기 때문에) 쓰기 루프는 계속해서 실행됩니다(fifo 버퍼가 가득 찰 때까지). 여러 동시 판독기에는 문제가 있지만 아마도 해당 가능성을 합리적으로 제거할 수 있습니다.
비루프 솔루션의 경우 fifo 대신 소켓을 사용할 수 있지만 (간단한) 판독기 프로그램(또는 해당 프로그램 이외의 것을 실행하려면 파이프)을 작성 cat
해야 합니다 open
.