22 İşletim Sistemi Kütüphanesi

22 İşletim Sistemi Kütüphanesi

İşletim sistemi kütüphanesi, dosya manipülasyonu , mevcut tarih ve saati elde etme ve işletim sistemi ile ilgili diğer bazı imkanlar için fonksiyonlar barındırır. os tablosunda tanımlanıktırlar. Bu kütüphane, Lua'nın taşınabilirliliği(işletim sistemi platformları arası) için bir bedel öder: Lua, ANSI C'de yazıldığından yalnızca ANSI standardının tanımladığı fonksiyonları kullanır. Dizin(directory) ve Ağ(socket) gibi işletim sistemlerinin kendine özgün çeşitli imkanlar bu standardın bir parçası değildir; bu nedenle os kütüphanesi bunları sağlamaz. Ana dağıtımda yer almayan işletim sistemlerinin genişletilmiş imkanlarına erişim sağlayan başka Lua kütüphaneleri vardır. Örneğin posix'in tüm işlevselliğini sunan POSIX.1 kütüphanesi, ve ağ desteği için luasocket.


Dosya manipülasyonu için bu os kütüphanesinin sağladığı sadece dosya ismini değiştiren os.rename ve dosyayı kaldıran (silen) os.remove'dir.

22.1 Tarih ve Saat


İki fonksiyon, date ve time, Lua'daki tüm tarih ve saat işlevselliğini sağlar.

argümansız çağrıldığında time fonksiyonu mevcut tarih ve saati bir sayı şeklinde kodlu olarak döndürür. (Çoğu sistemde bu sayı belli bir tarih başlangıcından bu yana geçen saniye miktarıdır.) Bir tablo ile çağrıldığında tablo ile betimlenen tarih ve saati temsil eden sayı döndürülür. Bu tür tarih tabloları aşağıdaki anlamlı alanlara sahiptir:

year    komple yıl
month   01–12 ay
day     01–31 gün
hour    00–23 saat
min     00–59 dakika
sec     00–59 saniye
isdst   boolean, yaz saati uygulaması açıksa true

İlk üç alan zorunlu; diğerleri sağlanmadığında varsayılanda öğlen (12:00:00). Bir Unix sisteminde (tarih başlangıcı 00:00:00 UTC, 1 Ocak 1970) İstanbul (Greenwich'in iki saat doğusunda) için aşağıdaki örneklere sahip oluruz:

print(os.time {year = 1970, month = 1, day = 1, hour = 2}) --> 0
print(os.time {year = 1970, month = 1, day = 1, hour = 2, sec = 1}) -->1
print(os.time {year = 1970, month = 1, day = 1}) -->36000

(diğerleri sağlanmadığında varsayılanda öğlen (12:00:00) , istanbul  Greenwich 'in 2 saat doğusunda olduğu için saat 10:00:00 ,  saniye cinsinden 36000.)

date fonksiyonu, time fonksiyonun tersi şeklindedir: tarih ve saati temsil eden bir sayıyı, bir takım üst düzey gösterime dönüştürür. ilk parametresi, istediğimiz gösterimi betimleyen biçimleme stringidir. İkinci parametre sayısal tarih-saat'dir; mevcut tarih ve saat varsayılandır.

Bir tarih tablosu üretmek için "*t" biçimleme stringini kullanıyoruz. Örneğin  os.date("*t", 906000490) çağrısı aşağıdaki tabloyu döndürür:

{day = 17, hour = 5, isdst = true, min = 48, month = 9, sec = 10, wday = 5, yday = 260, year = 1998}

os.date ile oluşturulan bu tablo, os.time 'daki alanlara ek olarak  haftanın günü (wday, 1, pazar) ve yılın gününüde (yday, 1, 1 Ocak) vermekte aklınızda bulunsun.

Diğer biçimleme stringleri için os.date, belli etiketlerin tarih ve saat ile ilgili bilgi ile değiştirildiği biçimleme stringinin bir kopyası olan bir string olarak tarihi biçimlendirir. Tüm etiketler, sıradaki örneklerde olduğu gibi '%harf' ile temsil edilir:

print(os.date("Bugün %A, %B ayi"))   --> Bugün Tuesday, May ayi
print(os.date("%x", 906000490))     --> 09/17/98

Tüm temsiller geçerli yerelleştirme ayarını takip eder. Örneğin, tr-TR (türkçe-Türkiye) yerelleştirme ayarında, %B “Mayıs” ve %x “17/09/1998 " ile sonuçlanır.

Aşağıdaki tablo tüm etiketleri, anlamını ve 17 Eylül-September 1998 Perşembe-Thursday 05:48:10'da değerini gösterir. Ayrıca tablo da sayısal değerler için  olası değerler aralığı gösterilmekte:

%a  haftanın günü kısaltmalı ( Thu-Prş şeklinde)
%A  haftanın günü tam ismi (Thursday-Perşembe şeklinde)
%b  ay adı kısaltmalı (Sep-Eyl şeklinde)
%B  ay adı tam ismi (September-Eylül şeklinde)
%c  tarih ve saat (Thu Sep 17 05:48:10 1998 şeklinde)
%d  ayın günü (17) [01-31]
%H  saat,  24-saat üzerinden (05) [00-23]
%I  saat,  12-saat üzerinden (05) [01-12]
%M  dakika (48) [00-59]
%m  ay (09) [01-12]
%p  "AM" veya "PM" (AM-öğleden önce , PM-öğleden sonra)
%S  saniye (10) [00-61]
%w  haftanın günü (4) [0-6 = Sunday-Saturday...=Pazar-Cumartesi..]
%x  tarih (09/17/98 şeklinde)
%X  saat (05:48:10 şeklinde)
%Y  yıl tam (1998)
%y  iki-basamaklı yıl (98) [00-99]
%%  '%' karakteri

Argümansız date'i çağırırsanız %c biçimini yani komple tarih ve saat bilgisini oluşturur. %x, %X ve %c temsillerinin sistem ve yerelleştirme ayarlarına göre değiştiğini unutmayın. aa/gg/yyyy gibi temel bir temsil istiyorsanız "%m/%D/%Y" şeklinde biçimleme string kullanın.

os.clock fonksiyonu, program için CPU zamanının saniye miktarını döndürür. Tipik kullanımı bir kod parçasının performansını ölçmek(benchmark) içindir:

local x = os.clock()
local s = 0
for i=1,10000000 do s = s + i end
print(string.format("gecen sure: %.2f\n", os.clock() - x))

22.2 Diğer os kütüphanesi çağrıları


os.exit fonksiyonu bir programın yürütmesini sonlandırır. os.getenv fonksiyonu ortam değişkeninin değerini elde eder.  değişkenin adını alır ve değeriyle bir string döndürür:

print(os.getenv("HOME"))    --> /home/lua unix de
print(os.getenv("windir"))  --> C:\Windows windows da

Değişken tanımlanmazsa çağrı nil döndürür. os.execute fonksiyonu bir sistem komutu çalıştırır; C'deki system fonksiyonuna eşdeğerdir. komut içeren bir string alır ve bir hata kodu döndürür. Örneğin hem Unıx hem de DOS-Windows'da yeni bir dizin(directory) oluşturmak için aşağıdaki fonksiyonu yazabilirsiniz:

function createDir(dirname)
    os.execute("mkdir " .. dirname)
end

os.execute fonksiyonu güçlüdür, tabi aynı zamanda tamamen sistem bağımlıdır.

os.setlocale fonksiyonu, bir Lua programı tarafından kullanılan geçerli yerelleştirme ayarını set eder. yerelleştirme ayarı, bölge veya dilsel farklılıkların davranışını tanımlar. setlocale fonksiyonunun iki string parametresi vardır: yerelleştirme ayar adı ve yerelleştirme ayarının hangi özellikleri etkileyeceğini belirten kategori. Altı yerelleştirme kategorisi vardır: "collate", stringlerin alfabetik düzenini kontrol eder, "ctype", tek tek karakter yazımını (a harfi nedir misal) ve büyük ve küçük harfler arasındaki dönüşümü kontrol eder. "monetary", Lua programlarında hiçbir etkisi yoktur; "numeric", sayıların nasıl biçimleneceğini kontrol eder; "time", tarih ve saatin nasıl biçimleneceğini kontrol eder ( os.date fonksiyonu misal); ve "all" yukarıdaki tüm işlevleri kontrol eder. Varsayılan kategori “all” 'dır böylece yalnızca yerelleştirme ayar adıyla setlocale'i çağırırsanız tüm kategoriler set edilir. setlocale fonksiyonu yerelleştirme ayar adını veya başarısız olursa nil değerini döndürür (genellikle sistem verilen yerelleştirme ayarını desteklemediğinden).

print(os.setlocale("ISO-8859-1", "collate")) --> ISO-8859-1

"numeric" kategorisi biraz incelikli. Portekizce ve diğer Latin dilleri küsüratlı sayıları temsil etmek için nokta yerine virgül kullandığından bu tip bir yerelleştirme ayarı Lua'nın bu sayıları okuma ve yazdırmasını değiştirir. Tabi yerelleştirme ayarı Lua'nın programlardaki sayıları ayrıştırma biçimini değiştirmez(print(3,4) gibi ifadelerin Lua'da zaten bir anlamı vardır). Lua kod parçaları oluştururken buralarda sorun yaşayabilirsiniz:

print(os.setlocale("pt_BR")) --> pt_BR
s = "return (" .. 3.4 .. ")"
print(s) --> return (3,4)
print(loadstring(s))
--> nil [string "return (3,4)"]:1: ’)’ expected near ’,’


Hiç yorum yok:

Yorum Gönder