A standard Tcl könyvtár a beépített Tcl lehetőségeket terjeszti ki
Tcl-ben megírt részekkel. A könyvtárt alkotó fájlokat tároló
fájlrendszerbeli könyvtár nevét az info library
paranccsal
kérdezhetjük le. A könyvtár inicalizálása az ebben található
init.tcl
végrehajtásával történik. A tclsh
ezt automatikusan megteszi
helyettünk.
A standard Tcl könyvtár részét képezi egy olyan unknown
eljárás, amely többek között
lehetővé teszi definiálatlan eljárások automatikus betöltését. Ehhez
a könyvtár több segédeljárást is tartalmaz, amelyek önállóan is
használhatók.
auto_mkindex könyvtár minta ?minta ...?Ahhoz, hogy az automatikus betöltés működjön, az automatikusan betöltendő scripteket tartalmazó könyvtárban létre kell hozni egy
tclIndex
nevű indexfájlt, amely megadja, hogy az egyes
eljárások definíciója mely fájlban található. Az indexfájl az
auto_mkindex
paranccsal hozható létre, argumentumként meg
kell adni egy könyvtár nevét és egy vagy több fájlnévmintát (utóbbiak
értelmezése a glob
parancs
szerint történik). Az auto_mkindex
a megadott fájlokból
kikeresi az összes eljárásdefiníciót és elkészíti az indexet.
Az eljárások keresése egyszerű módszerrel történik: az
auto_mkindex
csak azokat az eljárásdefiníciókat ismeri
fel, amelyeknek proc
kezdőszava a sor elején áll. Az
eljárás neveként az auto_mkindex
az ilyen sor második
szavát tekinti. Egyéb eljárásdefiníciók (például olyanok, amelyekben
a proc
előtt szóközök állnak) figyelmen kívül
maradnak.
auto_load eljárásnévAz
auto_load
parancs megkísérli a megnevezett eljárást
betölteni. Az átfésülendő könyvtárakat legmagasabb prioritással a
globális auto_path
változó határozza meg, melynek
tartalma könyvtárnevek listája. Ha az auto_path
változó
nem létezik, a TCLLIBPATH
környezeti változóban tárolt
lista adja meg a könyvtárneveket. Ha ez utóbbi sem létezik, akkor a
keresés a Tcl könyvtár könyvtárában történik.
Az átfésülendő könyvtárakban az auto_load
az
auto_mkindex
által létrehozott tclIndex
fájlban keresi a betöltendő eljárás definíciójának helyét. Ha
valamelyikben megtalálja, a megfelelő script fájl végrehajtásával
megpróbálja létrehozni az eljárást. Ha sikerül, 1-et ad vissza.
Ha az eljárás betöltése nem sikerül, mert az eljárás nem szerepelt
egyik indexfájlban sem, vagy a végrehajtott script nem definiálta az
eljárást, az auto_load
visszatérési értéke 0. A keresés
vagy a betöltendő script végrehajtása közben fellépő hibát az
auto_load
továbbadja.
Az auto_load
a háttértárról csak egyszer olvassa be az
indexfájlokat; az indexfájlokból kinyert információt a globális
auto_index
tömbben tárolja. A tárolt információ törlését
az auto_reset
paranccsal
kényszeríthetjük ki.
auto_execok parancsnévAz
auto_execok
parancs eldönti, hogy a létezik-e a
megadottal megegyező nevű végrehajtható fájl a PATH
környezeti változóban szereplő könyvtárakban. Ha igen, 1-et, különben
nullát ad vissza.
A keresett parancsokról az auto_execok
a globális
auto_execs
tömbben megjegyzi, hogy léteznek-e vagy sem,
elkerülvén ezzel a háttértáron való ismételt keresést. A tárolt
információ törlését az auto_reset
paranccsal kényszeríthetjük
ki.
auto_resetTörli az
auto_load
és az
auto_execok
parancsok által
felhalmozott információkat, valamint az automatikusan betölthetők
indexében szereplő eljárásokat. A törölt dolgok újraolvasása a
háttértárról igény esetén történik meg.
unknown parancsnév ?arg ...?Amikor a Tcl interpreter nem létező parancs hívásával kerül szembe, meghívja az
unknown
eljárást, és arugmentumként átadja
neki a nem létező parancs nevét és a hívás argumentumait (az átadott
argumentumokon már megtörténtek a helyettesítések). Az
unknown
sorrendben a következőkkel próbálkozik:
auto_load
segítségével megpróbálja mint
eljárást betölteni. Ha ez sikerül, a parancsot megismétli az
eredeti argumentumokkal. Ezt a próbálkozást letilthatjuk a globális
auto_noload
változó létrehozásával.
auto_execok
-val megvizsgálja, hogy
létezik-e a paranccsal megegyező nevű végrehajtható fájl. Ha
létezik, az exec
paranccsal végrehajtja az eredeti argumentumokra. Ezt a
próbálkozást letilthatjuk a globális auto_noexec
változó létrehozásával.
unknown
történeti helyettesítést
hajt végre.
Jelölés | Végrehajtott parancs |
!! | az előző parancs |
!n | ha n pozitív, az n. parancs, ha negatív, az n-el ezelőtti parancs |
^régi^új?^? |
az előző parancs, benne régi minden előfordulása újra helyettesítve |
unknown
kiterjeszti a parancs nevét és meghívja a parancsot az eredeti
argumentumokkal.
Ha fenti kísérletek valamelyike sikerrel jár, az unknown
az általa végrehajtott parancs visszatérési értékét adja vissza,
különben hibát generál.
Működése közben az unknown
az globális
unknown_pending
tömbben tartja nyilván, hogy mely
eljárások automatikus betöltése van folyamatban. Ennek segítségével
ismeri fel, ha az automatikus betöltés végtelen rekurzióba kerül.
A Tcl fájlkezelő parancsai számára úgy kell
megadni a fájlneveket, ahogyan az a unix rendszerekben szokás. A
gyökérkönyvtárhoz és az aktuális könyvtárhoz relatív fájlnevek mellett
használhatunk home-könyvtárhoz relatív fájlneveket is. A C-shell
mintájára a Tcl is tilda-helyettesítéssel oldja ezt
meg: a '~/' kezdetű fájlnevek a HOME
környezeti
változóban szereplő könyvtárhoz, a '~név/' kezdetű
fájlnevek a név azonosítójú felhasználó home-könyvtárához
relatívak.
Mint a legtöbb programozási nyelvben, a Tcl-ben is meg kell nyitnunk
egy fájlt, hogy használhassuk. A megnyitással kapunk egy azonosítót,
amellyel a további műveletek során a fájlra hivatkozunk. A Tcl
interpretert végrehajtó unix folyamat standard fájljait megnyitás
nélkül használhatjuk, azonosítójuk rendre stdin
,
stdout
és stderr
.
A Tcl parancsaival gyakorlatilag csak szöveges fájlokat kezelhetünk. Ennek az az oka, hogy a Tcl a stringeket C stringekkel reprezentálja, s így azok null-karaktert nem tartalmazhatnak. Mivel a fájlműveletek stringeket írnak és olvasnak, nem tudunk null-karaktereket írni vagy olvasni.
open fájlnév ?hozzáférés? ?engedélyek?Az
open
parancs két különböző funkciót hajt végre
aszerint, hogy a fájlnév '|' karakterrel kezdődik-e, vagy sem.
Ha a fájlnév első karaktere nem '|', az open
parancs
megnyitja a megadott fájlt, és visszaad egy azonosítót, amellyel a
fájlra a fájlkezelő parancsokban hivatkozhatunk.
A második paraméterrel határozzuk meg a megnyitás módját. Két forma közül választhatunk:
fopen
függvényénél is használt formában
egy- vagy kétkarakteres stringet adunk meg:
r | Megnyitás csak olvasásra. A fájlnak a megnyitáskor már léteznie kell. Ez az alapértelmezés. |
r+ | Megnyitás írásra és olvasásra. A fájlnak a megnyitáskor már léteznie kell. |
w | Megnyitás csak írásra. Ha a megnyitáskor a fájl még nem létezik, létrejön, ha már létezik, nulla hosszúságúra csonkolódik. |
w+ | Megnyitás írásra és olvasásra. Ha a megnyitáskor a fájl még nem létezik, létrejön, ha már létezik, nulla hosszúságúra csonkolódik. |
a | Megnyitás csak írásra. A fájlnak a megnyitáskor már léteznie kell. A fájlra vonatkozó író műveletek a fájl végéhez fogják fűzni az adatokat. |
a+ | Megnyitás írásra és olvasásra. Ha a fájl a megnyitáskor még nem létezik, létrejön. A fájlra vonatkozó író műveletek a fájl végéhez fogják fűzni az adatokat. |
RDONLY* | Megnyitás csak olvasásra. |
WRONLY* | Megnyitás csak írásra. |
RDWR* | Megnyitás írásra és olvasásra. |
APPEND | A fájlra vonatkozó író műveletek a fájl végéhez fogják fűzni az adatokat. |
CREAT | A megnyitással a fájl létrejön, ha még nem létezik (ezen jelző nélkül hibát okoz, ha nem létező fájlt próbálunk megnyitni). |
EXCL | A CREAT jelzővel együtt alkalmazva hatására hibát okoz, ha a megnyitáskor a fájl már létezik. |
NOCTTY | Terminál megnyitásakor megakadályozza, hogy a terminál a folyamat vezérlő termináljává váljon. |
NONBLOCK | A fájlra vonatkozó
műveletek nem fogják blokkolni a folyamatot. Lásd erről a jelzőről
a rendszer open hívásának dokumentációját is. |
TRUNC | Megnyitáskor a fájl nulla hosszúságúra csonkolódik, ha már létezik. |
*Ezek közül pontosan egyet kell megadni. |
Amennyiben írásra és olvasásra nyitottuk meg a fájlt, csak úgy szabad
író és olvasó műveletek között váltani, hogy közben kiadunk egy seek
parancsot.
Az opcionális harmadik paraméternek egész számnak kell lennie. Vele
adhatjuk meg, hogy ha a megnyitással létre kell hozni a fájlt, akkor
az milyen, a felhasználókra vonatkozó hozzáférési engedélyekkel jöjjön
létre. A megadott érték a folyamat fájlhozzáférési engedély
maszkjával együtt dönt az eredő engedélyekről (lásd az
umask
rendszerhívás dokumentációját). Az alapértelmezés
oktális 0666.
Ha az open
parancsnak '|' karakterrel kezdődő fájlnevet
adunk meg, akkor nem közönséges fájlt nyitunk meg, hanem a '|'
karakter mögé írt unix parancs pipeline végrehajtását kezdeményezzük
(a parancs pipeline megadásának szintaxisáról lásd az exec
parancsot). Ebben az
esetben a visszaadott azonosítóra végzett író műveletek a pipeline
inputjára írnak, az olvasó műveletek a pipeline outputjáról olvasnak.
Ha csak olvasásra nyitottuk meg a pipeline-t, a pipeline inputja a Tcl interpretert végrehajtó folyamat inputja lesz, hacsak a pipeline megadásában másként nem rendelkezünk. Hasonlóan, ha csak írásra nyitottuk meg a pipeline-t, a pipeline outputja a Tcl folyamat outputjára kerül.
close azonosítóA
close
parancs lezárja a megadott fájlt, illetve
megvárja a pipeline részét képező folyamatok befejeződését. Az
azonosítót a továbbiakban már nem használhatjuk. A parancs üres
stringet ad vissza, de előfordulhat, hogy végrehajtása közben hiba lép
fel.
puts ?-nonewline? ?azonosító? stringA
puts
parancs a string karaktereit kiírja az
azonosítóval megadott fájlba, alapértelmezésben a
stdout
-ra. Ha nem adjuk meg a -nonewline
kapcsolót, a string karakterei után még egy újsor karaktert is kiír.
Csak olyan fájlba írhatunk, amelyet írásra is megnyitottunk.
Mivel az író műveletek puffereltek, a puts
parancs
végrehajtása után nem garantált, hogy a string karakterei ténylegesen
kiíródnak. Ha mégis biztosak szeretnénk lenni ebben, akkor használjuk
a flush
parancsot.
flush azonosítóA
flush
parancs a megadott fájlba ténylegesen kiírja a
pufferelt és még kiíratlan adatokat. Üres stringet ad vissza.
gets azonosító ?változónév?A
gets
parancs a megadott fájlból beolvas egy egész sort,
és törli végéről az újsor karaktert (kivéve, ha a fájl utolsó sorát
nem zárja újsor karakter, ekkor nincs mit törölni). Csak olyan
fájlból olvashatunk, amelyet olvasásra is megnyitottunk.
Ha megadtunk egy változónevet is, a parancs értékül adja neki a sort, és visszaadja az olvasott karakterek számát (az újsor karaktert nem beleszámítva). Ha a fájlból egyetlen karaktert sem sikerül olvasni, mert az véget ért, a változóba üres string kerül és a visszatérési érték -1 lesz.
Ha nem adtunk meg változónevet, akkor a sor tartalma a parancs
visszatérési értéke lesz. A üres stringet ad vissza, ha a fájl véget
ért, de akkor, ha a sor üres. A két eset megkülönböztetésére
használjuk a eof
parancsot.
read ?-nonewline? azonosító read azonosító méretA
read
parancs első formájában egy darabban beolvassa és
visszaadja a megadott fájl hátralevő részét. Ha használjuk a
-nonewline
kapcsolót, törli a fájl utolsó karakterét, ha
az újsor karakter.
A második formában a parancs méret darab karaktert olvas, de legfeljebb annyit, amennyi még a fájl végéig hátra van. A visszatérési érték ekkor is a beolvasott karaktersorozat.
Csak olvasásra is megnyitott fájlból olvashatunk.
eof azonosítóAz
eof
parancs egyet ad vissza, ha az előző olvasó
művelet elérte a fájl végét, különben nullát.
Minden megnyitott fájlhoz tartozik egy hozzáférési pozíció, amely meghatározza, hogy a következő művelet a fájl hányadik karakterét írja vagy olvassa. A műveletek a hozzáférési pozíciót az utoljára írt vagy olvasott karakter mögé állítják, vagyis ha másképpen nem rendelkezünk, a műveletek ott folytatják a fájl írását vagy olvasását, ahol azt előzőleg abbahagytuk.
Bizonyos fájlok esetén nincsen más választásunk, minthogy végigírjuk vagy végigolvassuk őket. Ilyenek például a terminálra csatlakozó fájlok vagy a pipeline-ok. A tényleges, lemezen tárolt fájlok esetében viszont lehet értelme annak, hogy a fájlt ne szekvenciálisan írjuk vagy olvassuk, hanem kedvünk szerint mozogva.
seek azonosító távolság ?kiindulópont?A
seek
parancs lehetővé teszi, hogy megváltoztassuk
egy fájl hozzáférési pozícióját. Az új hozzáférési pozíciót
egy viszonyítási ponthoz relatívan, előjeles számmal adjuk meg. A
viszonyítás pont a következők egyike lehet:
start
current
end
lseek
rendszerhívás
dokumentációját).
seek
parancs visszatérési értéke üres string.
tell azonosítóA
tell
parancs visszaadja a megadott fájl hozzáférési
pozícióját.
cd ?könyvtárnév?A
cd
parancs megváltoztatja a Tcl interpretert futtató
folyamat munkakönyvtárát. A könyvtárnévben használhatunk tilda-helyettesítést. Az alapértelmezett
könyvtárnév a '~/'. A parancs üres stringet ad vissza.
pwdA Tcl interpretert futtató folyamat munkakönyvtárának nevét adja vissza.
glob ?kapcsolók? minta ?minta ...?A
glob
parancs a megadott minták valamelyikére illeszkedő
létező fájlok neveinek listáját adja vissza. Hibát okoz, ha nem
léteznek ilyen fájlok. A mintákban közönséges karaktereken túl a
C-shell jelöléseit használhatjuk:
? | Tetszőleges karakterre illeszkedik. |
* | Tetszőleges, akár nulla hosszúságú karaktersorozatra illeszkedik. |
[karakterek] | A szögletes zárójelek közé írt karakterekre illeszkedik. Ha valamely két karakter között kötőjel áll, az ASCII kód értelmében a két karakter közé eső karakterekre is illeszkedik. |
\x | Az x
karakterre illeszkedik. Így semlegesíthetjük a *?[]\
karakterek speciális jelentését. |
{s,t,...} | A vesszővel elválasztva felsorolt stringekre illeszkedik. |
A fájlnév elején vagy közvetlenül '/' karaktert mögött álló '.' karaktert a mintának explicit módon tartalmaznia kell, hogy illeszkedjen. Ugyanez igaz magukra a '/' karakterekre is.
A mintát '~' karakterrel kezdve ugyanúgy megadhatunk home-könyvtárhoz relatív hivatkozást, mint közönséges fájlnevek esetében.
A glob
parancs két kapcsolót támogat:
-nocomplain
--
glob
parancs a következőkben tér el a C-shell
viselkedésétől:
file művelet fájlnév ?arg ...?A
file
több különböző műveletet valósít meg egy
parancsban.
file dirname fájlnévA fájlnév utolsó '/' karakterét megelőző részét adja vissza. Ha a fájlnév utolsó '/' karaktere a fájlnév első karaktere, a visszatérési érték egy '/' karakter, ha a fájlnév egyáltalán nem tartalmaz '/' karaktert, egy '.' karakter.
file tail fájlnévA fájlnév utolsó '/' karakterével kezdődő részét adja vissza. Ha a fájlnév nem tartalmaz '/' karaktert, a visszatérési érték maga a fájlnév.
file rootname fájlnévA fájlnév utolsó '.' karakterét megelőző részét adja vissza. Ha a fájlnév nem tartalmaz '.' karaktert, a visszatérési érték maga a fájlnév.
file extension fájlnévA fájlnév utolsó '.' karakterével kezdődő részét adja vissza. Ha a fájlnév nem tartalmaz '.' karaktert, a visszatérési érték az üres string.
file readlink fájlnévA fájlnévvel megadott szimbolikus link értékét adja vissza. Ha nem szimbolikus linket adunk meg, hiba lép fel.
file exists fájlnévEgyet ad vissza, ha a megnevezett fájl létezik, és a Tcl interpretert futtató felhasználónak van keresési joga az ahhoz vezető könyvtárakban, különben nullát.
file owned fájlnévEgyet ad vissza, ha a megnevezett fájl a Tcl interpretert futtató felhasználó tulajdonában van, különben nullát.
file readable fájlnévEgyet ad vissza, ha a megnevezett fájlra a Tcl interpretert futtató felhasználónak van olvasási joga, különben nullát.
file writable fájlnévEgyet ad vissza, ha a megnevezett fájlra a Tcl interpretert futtató felhasználónak van írási joga, különben nullát.
file executable fájlnévEgyet ad vissza, ha a megnevezett fájlra a Tcl interpretert futtató felhasználónak van végrehajtási joga, különben nullát.
file isfile fájlnévEgyet ad vissza, ha a megnevezett fájl közönséges fájl, különben nullát.
file isdirectory fájlnévEgyet ad vissza, ha a megnevezett fájl könyvtár, különben nullát.
file type fájlnévA megnevezett fájl típusára utaló stringet ad vissza, amely lehet
file
, directory
,
characterSpecial
, blockSpecial
,
fifo
, link
vagy socket
.
file size fájlnévA megnevezett fájl bájtokban mért méretét adja vissza. Ha a fájl nem létezik, vagy mérete egyéb okból nem lekérdezhető, hiba lép fel.
file atime fájlnévA megnevezett fájlon végzett utolsó hozzáférés időpontját adja meg a POSIX szabvány szerint, valamely rögzített időpont (általában 1970. január 1.) óta eltelt másodpercekben.
file mtime fájlnévA megnevezett fájlon végzett utolsó módosítás időpontját adja meg a POSIX szabvány szerint, valamely rögzített időpont (általában 1970. január 1.) óta eltelt másodpercekben.
file stat fájlnév tömbnévA megnevezett fájlra végrehajtja a
stat
rendszerhívást,
és a kapott információkat a megadott tömb következő elemeinek adja
értékül: atime
, ctime
, dev
,
gid
, ino
, mode
,
mtime
, nlink
, size
,
type
, uid
. A tömb type
elemébe
a file
type
parancsban felsorolt értékek
egyike, a többi elembe egész szám kerül. Az adatok jelentéséről lásd
a stat
rendszerhívás dokumentációját. Maga a parancs
üres stringet ad vissza.
file lstat fájlnév tömbnévAbban különbözik a
stat
művelettől, hogy a
stat
helyett az lstat
rendszerhívást
használja. Ezért ha a fájlnév egy szimbolikus linket ad meg, a
tömbben visszaadott információk magára a szimbolikus linkre, és nem az
általa hivatkozott fájlra vonatkoznak.
file copy ?-force? ?--? forrás cél file copy ?-force? ?--? forrás ?forrás ...? célkönyvtárFájlmásolás. A
-force
kapcsoló hatására felülírja a már
létező fájlt. A --
a kapcsolók végét jelzi. Kötőjellel
kezdődő fájlnevek esetén használandó.
file delete ?-force? ?--? útvonal ?útvonal ...?Fájltörlés. A
-force
kapcsoló hatására törli a nem üres
könyvtárakat is.
file mkdir könyvtár ?könyvtár ...?Könyvtár létrehozása.
file rename ?-force? ?--? forrás cél file rename ?-force? ?--? forrás ?forrás ...? célkönyvtárÁtnevezi, illetve átmozgatja a megadott fájl(oka)t. A
-force
kapcsoló hatására felülírja a már
létező fájlt.
tcl8.0 |
file attributes fájlnév ?-owner user? ?-group group ?-permissions oktális_kód?Beállítja a fájl tulajdonosait és elérési jogait. Ha csak a fájl nevét adjuk paraméterül, akkor a fájl attribútumaival tér vissza. |
parray tömbnévA
parray
eljárás a megnevezett tömböt kinyomtatja a
standard outputra. A tömbnek a hívó számára láthatónak kell
lennie.