문제

안녕하세요 Stackoverflowers,

나는 저자의 펄의 autodie pragma,변화하는 컴파일러 내장 기능을 던지는 예외에 실패입니다.그것은 유사한 , 지만,어휘 범위를 확장할 수 있는 예외 모델은,더 지적인 반환을 검사하며,검사를 하나라도 통과 훨씬,훨씬 더 좋은 오류 메시지를 가지고 있습니다.그것을 대체 할 것 Fatal 모듈은 미래에 자료의 펄(잠정적으로 5.10.1+)수 있지만,현재에서 다운로드 CPAN 에 대한 Perl5.8.0 습니다.

다음 릴리스 autodie 추가 특별한 취급에 대한 통화 flockLOCK_NB (non-blocking)옵션을 선택합니다.실패하면 flock 전화 일반적으로 발생하는 예외에서 autodie,실패 전화 flockLOCK_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_VIOLATIONwinerror.h).

불행하게도,나는 생각하지 않는 Win32::Winerror 에 에서 핵심입니다.한편,마이크로소프트가 이제까지 상 Windows 오류 코드는,거의 모든 윈도우 프로그램 작성 작동하지 않을 것입,그렇지가 있다고 생각하지 않을에 문제가 될 하드 코딩이다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top