2013-10-03 5 views
0

읽기 전용 파일을 만든 다음 파일 특성을 사용하여 읽고 쓸 수 있는지 확인하려고 시도하지만 항상 읽기 쉽고 쓰기 가능한 파일을 반환합니다.파일 특성이 작동하지 않습니다.

무엇이 잘못 되었나요? 여기

use strict; 
    use Fcntl; 
    sysopen(DATA, "file.txt", O_CREAT | O_RDONLY); 
    print DATA "Bob\n"; 
    close (DATA); 

    my $file='file.txt'; 
    my (@description,$size); 
    if (-e $file) 
    { 
    push @description, 'readable' if (-r _); 
    push @description, 'writable' if (-w _); 
    push @description, (($size = -s _)) ? "$size bytes" : 'empty'; 
    print "$file is ", join(', ',@description),"\n"; 
    } 

무엇을 printted된다
enter image description here

누군가가 제발 도와 드릴까요?

+0

모드 (Mode) ('O_CREAT | O_RDONLY'을) 단순히 당신이 당신 동안 '파일 핸들 할 의도 것을 선언 그것을 열어. 파일 시스템에서 권한을 설정하려는 경우 이는 완전히 다른 매개 변수입니다. – tjd

답변

2

umask 값과 함께 PERMS 기본값 인 0666이 사용자에게 쓰기 가능한 파일을 제공합니다. umask을 변경하거나 PERMS 인수를 sysopen에 추가하십시오. 예를 읽기 전용 파일을 얻을 경우, 당신은 umask를 0022 기본적 때, 당신은 할 수 :

sysopen(DATA, "file.txt", O_CREAT | O_RDONLY, 0466); 
+0

OP의 umask에는 아무런 문제가 없습니다. 작성된 파일은 이미 쓰기 가능 여부를 테스트합니다. 그러나 sysopen에 전달 된 플래그에는 문제가 있습니다. 내 대답을 보라. – pilcrow

+0

@pilcrow OP는 읽기 전용 파일이 필요하며 읽기 및 쓰기가 가능한 파일이 아니라고 명시했습니다. – JRFerguson

+0

네 말이 맞아. 나는 OP의 서사를 너무 빨리 읽었다. – pilcrow

관련 문제