io_uring_0206
IO_URING Linking requests
연결 요청
'io_uring'에서는 제출된 순서대로 완료가 도착하지 않습니다.
이에 대해서는 하위 수준 'io_uring' 인터페이스 장에서 논의했습니다.
특정 작업이 순서대로 발생하도록 강제하려면 어떻게 해야 합니까?
이는 요청을 서로 연결함으로써 가능합니다.
여기의 예는 그 방법을 보여줍니다.
이것은 상당히 간단한 프로그램입니다.
빈 파일을 열고, 거기에 문자열을 쓰고, 파일에서 문자열을 읽은 다음 닫습니다.
'io_uring'은 제출된 작업이 순서대로 실행된다는 것을 보장하지 않으므로 우리 프로그램에 문제가 될 수 있습니다.
프로그램을 실행할 때마다 잘리는 빈 파일이므로 읽기 전에 쓰기 작업이 완료되지 않으면 읽을 내용이 없습니다.
또한 읽기나 쓰기 작업 또는 두 작업 모두 전에 닫기 작업이 완료된 경우 해당 작업도 실패할 수 있습니다.
이러한 이유로 이 프로그램은 작업을 IOSQE_IO_LINK 플래그와 연결합니다.
이렇게 하면 작업이 차례로 실행됩니다.
이 프로그램은 이해하기 매우 간단합니다.
link_Operations() 함수에서는 io_uring_prep_write()를 호출하지만 IOSQE_IO_LINK 플래그를 설정하여
다음 작업이 이 작업에 연결되도록 합니다.
다음으로, 이전 쓰기 작업에 연결된 io_uring_prep_read()를 호출합니다.
이 작업에 IOSQE_IO_LINK 플래그도 설정하여 io_uring_prep_close()로 설정한 후속 닫기 작업이 이 작업과 연결되도록 합니다.
이로 인해 'io_uring'이 쓰기, 읽기 및 닫기 작업을 차례로 실행하게 됩니다.
Note - 주의
이 예제가 작동하려면 커널 5.6 이상이 필요합니다.
5.5 이하 버전에서는 읽기(read), 쓰기(write) 및 닫기(clone) 작업이 지원되지 않습니다.
