편집기에 파일이 열려 있는지 프로그램이 알 수 있나요?

편집기에 파일이 열려 있는지 프로그램이 알 수 있나요?

터미널 창에서 emacs를 사용하여 수동으로 편집하는 파일이 있습니다. 그런 다음 파일을 읽고, 파일에 오류가 있는지 확인하고, 목록을 알파벳순으로 정렬하여 파일을 수정하는 스크립트가 있습니다. 스크립트를 실행하기 전에 항상 파일을 저장하고 편집기를 종료하고 싶습니다. 그렇지 않으면 편집기의 저장되지 않은 변경 사항과 스크립트에 의한 변경 사항 사이에 충돌이 발생할 수 있습니다.

Linux에서 프로그램은 다른 프로그램이 읽기-쓰기 모드로 파일을 열었는지 알 수 있습니까? 이 경우 스크립트가 오류를 발생시키고 종료되도록 하고 싶습니다.

그렇지 않다면 emacs의 래퍼 역할을 하는 스크립트를 작성하고 emacs가 이 특정 파일을 편집하고 있음을 확인하면 세마포어 파일을 생성하는 등 더 복잡한 솔루션을 고려할 수 있습니다. (저는 보통 별칭을 통해 emacs를 호출합니다.)

[편집] 나는 emacs가 보이지 않는 세마포어 파일을 자동으로 생성한다는 사실을 활용하여 나에게 맞는 솔루션을 찾았습니다. 이 질문을 삭제하고 싶었지만 SE 인터페이스에서는 그렇게 할 수 없는 것 같습니다. 명령줄에서 Flock(예: )을 사용하여 명시적으로 flock a.a /bin/emacs -nw a.a권고 잠금을 획득 할 수도 있습니다.

답변1

Linux에서 프로그램은 다른 프로그램이 읽기-쓰기 모드로 파일을 열었는지 알 수 있습니까? 이 경우 스크립트가 오류를 발생시키고 종료되도록 하고 싶습니다.

프로세스가 소유한 파일 핸들을 확인할 수 있습니다. 그러나 "열기"는 다소 모호한 용어입니다. 파일을 표시하고 편집하려면 파일을 열고 내용을 읽고 파일 핸들을 다시 닫으면 됩니다. 따라서 다른 프로그램은 다른 사용자 대상 프로그램이 무엇을 열었는지 합리적으로 가정할 수 없습니다. 이는 고정된 개념이 아니기 때문입니다.

귀하의 사용 사례는 귀하와 비슷합니다

  • 편집자가 파일을 저장한 후 외부 프로그램을 자동으로 실행하고 다시 읽도록 하려는 경우
  • 편집자가 파일 변경 사항을 자동으로 인식하는지 확인하십시오(대부분의 경우 emacs가 이를 수행함).
  • 또는 반대로 외부 프로그램을 활성화하여 변경되는 파일을 모니터링하세요.

마지막 방법이 가능합니다. fanotify최신 Linux와 inotify모든 Linux(기본적으로 항상 Linux 2.6.13)에서 사용할 수 있습니다. 하지만 쉘 스크립트만으로는 이 작업을 수행할 수 없습니다. 커널에서 이러한 알림을 받을 수 있는 언어를 사용해야 합니다. 예를 들어, 이 pyinotify프로그램을 사용하거나(제가 좋아하지 않는데, 이름에 공백이 있는 파일을 잘 처리하지 못합니다), pyinotifyPython 프로그램의 라이브러리로 사용할 수 있습니다. C++, C 및 모든 시스템 언어의 경우 직접 호출 fanotifyinotifyC API를 통한 호출이 있습니다 .

관련 정보