perl
2013-10-03 69 views 0 likes 
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

的模式('O_CREAT | O_RDONLY')僅僅聲明你打算與文件句柄,而你」做什麼已經打開了。如果你想在文件系統中設置權限,那是一個完全不同的參數。 – tjd

回答

2

umaskumask您的進程值以及默認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

相關問題