EWOULDBLOCK 해당하는 errno 윈도우에서는 Perl
-
02-07-2019 - |
문제
안녕하세요 Stackoverflowers,
나는 저자의 펄의 autodie pragma,변화하는 컴파일러 내장 기능을 던지는 예외에 실패입니다.그것은 유사한 명, 지만,어휘 범위를 확장할 수 있는 예외 모델은,더 지적인 반환을 검사하며,검사를 하나라도 통과 훨씬,훨씬 더 좋은 오류 메시지를 가지고 있습니다.그것을 대체 할 것 Fatal
모듈은 미래에 자료의 펄(잠정적으로 5.10.1+)수 있지만,현재에서 다운로드 CPAN 에 대한 Perl5.8.0 습니다.
다음 릴리스 autodie
추가 특별한 취급에 대한 통화 flock
과 LOCK_NB
(non-blocking)옵션을 선택합니다.실패하면 flock
전화 일반적으로 발생하는 예외에서 autodie
,실패 전화 flock
용 LOCK_NB
단순히는 false 를 반환하는 경우 반환된 값($!
가) EWOULDBLOCK
.
그 이유는 그래서 사람들이 계속할 수 있는 코드를 작성하여 다음과 같:
use Fcntl qw(:flock);
use autodie; # All perl built-ins now succeed or die.
open(my $fh, '<', 'some_file.txt');
my $lock = flock($fh, LOCK_EX | LOCK_NB); # Lock the file if we can.
if ($lock) {
# Opportuntistically do something with the locked file.
}
위 코드에서는 잠금 실패하기 때문에 다른 사람은 파일 잠 이미(EWOULDBLOCK
에)것으로 간주되지 않는 하드러므로 autodying flock
단 false 값을 반환.하는 상황에서 우리는 작업 중인 파일 시스템이 지원하지 않는 파일 잠금 장치 또는 네트워크시스템 및 네트워크,사망한 후 autodying flock
를 생성하는 적절한 예외를 볼 때 우리의 errno 지 EWOULDBLOCK
.
이 잘 작동하고 내 dev 버전은 유닉스에서 맛 시스템지만,그것은 실패하면 끔찍하게 under Windows.그것은 나타나는 동안 Perl Windows 지원 LOCK_NB
옵션이 정의하지 않는 EWOULDBLOCK
.대신,errno 반환되는 것은 33("도메인 오류")차단할 때가 발생합니다.
분명히 수드-코드가 이 일로 autodie
, 지만,무엇을 원하는 여기에는 것을 의미하기 때문에,나는 망하는 경우 이러도 변경(또는 변경).내가 사랑하는 것과 비교해 윈도우의 상당 POSIX::EWOULDBLOCK
, 수는 없지만 생명의 나를 찾는 것은 정의됩니다.당신이 도움이 될 수 있다면 알려주세요.
답변 내가 특별히 원하지 않:
- 제안하는 하드드로는 일정(또는 나쁜 여전히 떠나,마법의 번호를 부동 대략).
- 지원하지 않는
LOCK_NB
기능 모두에 윈도우에서. - 가정하면 어떤 장애에서
LOCK_NB
전화flock
반환해야 합니다 단순하게 거짓입니다. - 는 제안 나는 요청에 p5p 나 perlmonks.나는 이미 알고 있습니다.
- 는 방법에 대한 설명
flock
, 거나,예외 또는Fatal
작동합니다.나는 이미 알고 있습니다.속속들.
해결책
Win32 에서"네이티브"Perl,note$^E 좀 더 자세히 설명서 33,"프로세스에 액세스할 수 없는 파일이기 때문에 다른 프로세스의 일부를 고정 파일을" ERROR_LOCK_VIOLATION
(에서 사용 가능 Win32::Winerror 에).
다른 팁
Windows-specific 오류 코드를 사용하고 싶 $^E
.이 경우에는,그것의 33:"프로세스에 액세스할 수 없는 파일이기 때문에 다른 프로세스의 일부를 고정 파일"(ERROR_LOCK_VIOLATION
에 winerror.h
).
불행하게도,나는 생각하지 않는 Win32::Winerror 에 에서 핵심입니다.한편,마이크로소프트가 이제까지 상 Windows 오류 코드는,거의 모든 윈도우 프로그램 작성 작동하지 않을 것입,그렇지가 있다고 생각하지 않을에 문제가 될 하드 코딩이다.