Linux에서 C를 사용하면 write() 함수를 사용하여 버퍼에 데이터를 쓸 때마다 신호 처리기를 트리거하는 방법은 어떨까요? 핸들러는 실행시 버퍼에 기록 된 모든 데이터를 읽습니다.I/O 용 트리거 신호 처리기
답변
소켓은 소켓 파일 설명자에서 비동기 모드를 활성화하여이를 지원합니다. 리눅스에서는 fcntl 호출을 사용하여이 작업을 수행합니다.
/* set socket owner (the process that will receive signals) */
fcntl(fd, F_SETOWN, getpid());
/* optional if you want to receive a real-time signal instead of SIGIO */
fnctl(fd, F_SETSIG, signum);
/* turn on async mode -- this is the important part which enables signal delivery */
fcntl(fd, F_SETFL, fcntl(fd, F_GETFL, 0) | O_ASYNC);
파이프와 FIFO도 커널 2.6에서 이것을 지원합니다. – jschmier
제 질문에 대답 해 주신 모든 분들께 감사드립니다. 대단히 감사합니다. –
pipe()
과 O_ASYNC
을 사용하면 파이프에 새 데이터가있을 때마다 파이프의 읽기 끝에 SIGIO
이 표시됩니다.
FIFO를위한 것이 아닙니다, 파이프 (as suggested by Ken Bloom), 비동기 소켓 (as suggested by mark4o), 그렇지 않으면 신호 (즉, SIGIO
)을 발생하지 않습니다, 나는 당신이를 보낼 raise()
를 사용할 수도있을 것 같군요 버퍼에 데이터를 기록한 후 현재 프로세스에 신호를 보낸다. 실제로 무엇을 성취하려고하는지에 따라 이것이 최선의 해결책이 아닐 수도 있습니다.
업데이트
내가 제대로 이해하면, 당신은 파일에 기록 할 쓰기의 완성에 생성 된 SIGIO 신호가 다음 신호 처리기 내에서 데이터를 다시 읽어 . 파일에 asynchronous I/O을 사용하려고합니다.
Asynchronous I/O on linux or: Welcome to hell에서 저자는 SIGIO 신호 사용을 포함하여 Linux에서 다양한 비동기 I/O 기술을 설명합니다. SIGIO 신호 기술은 일반 파일과 함께 사용할 수 없습니다.
앞서 언급 한 기사의 저자가 2.6 커널에서 제공되는 POSIX AIO API에 대해별로 생각하지 않지만 어쨌든 비동기식 읽기/쓰기 알림을 제공하는 데 사용할 수 있으므로이 기사를 조사하고 싶을 수 있습니다 시그널과 함수 콜백을 통해 정규 파일로 완성.
Boost application performance using asynchronous I/O에서 저자는 AIO API를 도입하기 전에 기본 Linux I/O 모델에 대한 개요를 제공합니다.
- 1. Perl 5.10.0 신호 처리기 문제
- 2. 알려진 지점에서 신호 처리기 실행
- 3. 비 IO 이벤트, 신호 없음으로 epoll_wait 인터럽트
- 4. 사용자 공간의 C/C++ 타이머 신호 처리기
- 5. 두 개의 특정 이벤트가 발생할 때 이벤트 처리기 신호
- 6. Android 용 IO 차단 없음
- 7. 파이썬 용 io 모듈의 문제점
- 8. Internet Explorer 용 MIME 처리기
- 9. 특정 신호에 대한 신호 처리기 등록이 다른 등록 신호를 무시합니까?
- 10. JqTouch - 애니메이션 용 트리거 감지
- 11. 트리거 오류가
- 12. "프로그램 수신 신호 : EXC_BAD_ACCESS"- 트리거 된 위치를 식별하는 방법은 무엇입니까?
- 13. Android 상호 작용 신호 (초보자 용 질문)
- 14. 신호 수신 신호 SIGIO
- 15. 기본 신호 처리기를 실행
- 16. Windows 용 URL 스킴 (프로토콜 처리기) 프로그래밍?
- 17. .NET 용 ebXML 메시지 서비스 처리기 ...?
- 18. ios 용 브라우저 프로토콜 처리기 옵션
- 19. HTML을 통해 Silverlight 용 onLoaded 처리기 추가
- 20. Facebook 용 Javascript 이벤트 처리기 보내기
- 21. Ada IO Multiplexing on Linux
- 22. 처리기
- 23. IO 분석 도구?
- 24. 자바 라인 IO 대 C++ IO?
- 25. GHC IO 관리자는 어떤 IO 작업을 지원합니까?
- 26. IO-APIC-fasteoi와 IO-APIC-edge의 차이점
- 27. pyqt 신호 문제
- 28. Apache Commons IO in .Net
- 29. 스케줄러가 시작되기 전 (또는 멈춘 후) IO 용 FreeRTOS 큐
- 30. 어떻게 System :: IO :: Stream ^을 PlaySound 용 LPCSTR로 변환합니까?
성취하고자하는 것이 무엇인지 구체적으로 알려주십시오. 왜 신호가. 다른 스레드에서 작성된 데이터를 기다리지 않는 것이 좋습니다. 함수를 호출하지 말고 신호를 보내면 어떨까요? –
쓰기 작업을 수행하는 코드에 액세스 할 수 있습니까? 왜 읽음을 언급해야할까요? – ezpz
내 문제는 하나의 문자열을 장치에 쓸 때 두 개의 sigio 트리거가 발생한다는 것입니다. 어느 것이 바람직하지 않습니다. 내 신호 처리기는 작성된 모든 문자를 읽습니다. –