읽을 때 문자 특수 파일이 차단되는지 확인하는 방법

읽을 때 문자 특수 파일이 차단되는지 확인하는 방법

실제로 문자를 읽지 않고 문자 특수 파일에서 문자를 읽는 경우 파일이 차단되는지 알 수 있기를 원합니다. 이것이 가능합니까?

답변1

0 timeout 을 사용하여 bash에서 이 작업을 수행할 수 있습니다 read.

if read -t 0
then read data
fi

stdin 이외의 파일 설명자(예: 3)를 테스트하려면 를 사용하십시오 -u 3. stdin에 준비된 문자 수를 확인하려면 작은 Perl 스크립트를 사용할 수 있습니다.

#!/usr/bin/perl
require 'sys/ioctl.ph';
$size = pack("L", 0);
ioctl(*STDIN, FIONREAD(), $size) or die "ioctl fail: $!\n";
$size = unpack("L", $size);
print "stdin ready: $size\n";

답변2

POSIX는 해당 블록 읽기를 포함하여 "오류를 감지하고 반환할 수 있는" 비차단, 제로 문자 읽기를 허용합니다.

  • open(2)장치가 O_NONBLOCKing 모드에 있습니다.
  • read(2)개수는 0입니다.

read작업에서 오류를 확인 하면 read-1이 반환되고 읽기가 차단되는지 여부 (또는 소켓의 경우이지만 문자 장치에 대해 묻는 경우) errno로 설정됩니다.EAGAINEWOULDBLOCK

답변3

C 또는 C++에서는 일반적으로 pselect()읽을 데이터가 있는지 테스트합니다. 이를 위해 파일 설명자 모드를 비차단으로 설정할 필요는 없습니다.

관련 정보