sysopen FILEHANDLE,FILENAME,MODE,PERMS
Atidaro failą, kurio failo vardas duotas FILENAME, ir susieja jį su FILEHANDLE. Jei FILEHANDLE yra išsireiškimas, jo reikšmė naudojama kaip realios norimos filehandle pavadinimas. Ši funkcija kreipiasi į operacinėje sistemoje esančią open
funkciją su parametrais FILENAME, MODE, PERMS.
Įmanomos MODE parametro reikšmės ir vėliavėlių bitai yra priklausomi nuo sistemos; jie pasiekiami per standartinį modulį Fcntl
. Operacinės sistemos dokumentacijoje aprašyta funkcijos open
galimos reikšmės bei vėliavėlių (flags) bitai. Galima sujungti kelias vėliavėles, naudojant |
-operatorių.
Kai kurios dažniausios reikšmės yra O_RDONLY
atidarant failą tik skaitymui skirtame režime (read-only), O_WRONLY
atidarant failą tik rašymui skirtame režime (write-only) ir O_RDWR
atidarant failą read-write režime.
Dėl istorinių priežasčių, kai kurios reikšmės veikia beveik kiekvienoje Perl palaikomoje sistemoje: nulis reiškia read-only, vienas reiškia write-only, o du reiškia read-write. Žinoma, kad šios reikšmės neveikia OS/390 & VM/ESA Unix ir Macintosh; tad ko gero norinčių jas naudoti naujame kode nebus.
Jei failas, pavadinimu FILENAME neegzistuoja ir open
kreipimasis jį sukuria (dažniausiai todėl, kad MODE įtraukia O_CREAT
vėliavėlę), tada PERMS reikšmės specifikuoja permissions'us naujai sukurto failo. Jei praleistas PERMS argumentas sysopen
, Perl naudoja aštuntainę reikšmę 0666
. Šie permissions'ai turi būti aštuntainiai ir modifikuojami proceso dabartinio umask
.
Daugumoje sistemų O_EXCL
flag'as galimas atidarinėjant failus išskirtiniame režime. Tai nėra užlokinimas: išskirtinumas čia reiškia, kad jei failas jau egzistuoja, sysopen() nesuveikia. O_EXCL
gali neveikti tinklinėse failų sistemose ir neturi jokio efekto, kol O_CREAT
flag'as taip pat nėra nustatyta. Užstatant O_CREAT|O_EXCL
neleidžia atidaryti failo, jei tai yra simbolinė sąsaja, tačiau neapsaugo nuo simbolinių sąsajų failo path'e.
Kartais norima sutrumpinti jau egzistuojantį failą. Tai gali būti padaryta naudojant O_TRUNC
vėliavėlę. O_TRUNC
elgesys su O_RDONLY
yra neapibrėžtas.
Retai, jei išvis kada turėtų būti naudojamas 0644
kaip argumentas sysopen
, nes jis atima vartotojo pasirinktį turėti atlaidesnį umask. Geriau jį praleisti. Skaityti perlfunc(1) skirių apie umask
daugiau apie tai.
Pažymėtina, jog sysopen
priklauso nuo fdopen() C bibliotekos funkcijos. Daugelyje UNIX sistemų, fdopen() patiria nesėkmę, kai failo deskriptoriai yra didesni nei tam tikra reikšmė, dažniausia 255. Jei reikia daugiau nei tiek deskriptorių, verta apgalvoti rebuildinti Perl, kad šis naudotų sfio
biblioteką ar, gal, naudojant POSIX::open() funkciją.
Daugiau perlopentut mielesniam, ir mandagesniam failų atidarymo aprašymui.