FIFO 또는 작성자 액세스를 차단하지 않고 데이터만 삭제하는 것이 가능합니까?

FIFO 또는 작성자 액세스를 차단하지 않고 데이터만 삭제하는 것이 가능합니까?

FIFO는 판독기와 기록기 모두 열어야 하기 때문에 사용상 문제가 있습니다. 하나가 늦으면 다른 하나는 운영 체제 내에서 차단됩니다.

게시 메커니즘을 구현해야 합니다. 프로그램은 로그를 게시하고 누군가가 듣기에 "관심"하면(예: 게시 채널을 열면) 메시지를 받게 됩니다. 아무도 "관심"하지 않으면 메시지가 사라질 것입니다. 문제 없습니다. 하나 이상의 리스너를 지원하지 않습니다. 문제 없습니다. 무엇을 사용할 수 있나요?

답변1

UDP를 브로드캐스트할 수 있습니다. 이것은보내는 사람섹션에 무엇이든 파이프하세요.

socat - UDP-DATAGRAM:127.255.255.255:50011,sourceport=50022,broadcast

수화기이 기능을 사용하면 언제든지 파티에 참가하거나 파티에서 나갈 수 있습니다.

socat - UDP-LISTEN:50011,bind=127.255.255.255,sourceport=50022,reuseaddr

참고 및 설명:

  • UDP는 패킷이 순서대로 도착한다고 보장하지 않습니다(참조:이것)
  • 5001150022선택한 포트 번호입니다 .
  • 이 주소는 127.255.255.255루프백 인터페이스를 통해 방송하는 발신자를 나타내며 원하는 경우 LAN 내에서 방송하도록 조정할 수 있습니다.
  • 다시 말하지만, bind=127.255.255.255다른 곳에서 오는(있는 경우) UDP 패킷에 대해 걱정할 필요가 없도록 수신기는 이 인터페이스로 제한되어야 합니다.
  • 고정하는 이유는 두 가지입니다 sourceport.
    • 수신자는 다른(아마도 임의의) 소스 포트에서 동일한 주소와 포트로 방송하는 다른(악의적인?) 발신자를 "보지" 않습니다.
    • 어떤 이유로 발신자가 종료된 후 이를 다시 시작할 수 있으며 발신자가 임의 소스 포트를 사용하는 경우 기존 수신자는 고정된 상태로 유지되므로 일반적으로 새 전송 측을 "볼" 수 없습니다. 이전 소스 포트로 이동합니다.
  • reuseaddr여러 수신기가 공존할 수 있습니다.
  • reuseaddr기술적으로 여러 발신자를 실행할 수 있는 발신자 섹션에 추가할 수 있습니다 . 이로 인해 수신 측에서 인터리브된 출력이 발생할 수 있으므로 권장되지 않습니다.
  • 실행 중인 발신자는 정확히 동일한 주소와 포트 튜플을 사용하여 다른 (악성?) 발신자를 차단합니다. 그러나 발송인이 종료되면 다른 발송인이 대신할 수 있습니다. 루트 액세스 권한이 있는 경우 sourceport아래에서 선택할 수 있습니다 1024. 대부분의 운영 체제에서는 일반 사용자가 이러한 포트("권한 있는 포트"라고 함)에 바인딩하는 것을 허용하지 않으므로 보낸 사람이 죽은 경우에도 사용자를 가장할 수 없습니다. 그러나 일반 사용자가 실행하는 수신기는 권한 있는 포트를 으로 사용할 수 있습니다 sourceport. 루트만 수신할 수 있도록 하려면 다른 포트( 50011예제에서는)를 권한 있는 포트로 변경하세요.

관련 정보