Merhaba sevgili e-bergi okurları! Bu ayki yazımda dosya türlerini ve bu türleri belirleme yöntemlerini anlatacağım. İşletim sistemlerinin dosya türlerini belirlerken kullandıkları yöntemleri karşılaştırıp en güvenilir yöntem ile en hızlı yöntemi karşılaştıracağım.

Bildiğiniz gibi işletim sistemleri sadece kendi belirledikleri dosya türleri ile değil dışarıdan gelen dosya türleri ile de çalışmakla yükümlüdürler. Bu da sistemin çalışma sırasında dosya türünün ne olduğunu anlamasını gerektirmektedir.

Öncelikle dosya içerik türü tam olarak nedir onu inceleyelim. Genelde İngilizce terimi olan internet media type veya temeli olan MIME type ile anılır dosya içerik türleri. MIME(Multipurpose Internet Mail Extensions) ise e-posta içeriğindeki karakter formatlarından hangilerinin desteklendiğini belirtmek için kullanılan bir internet standartıdır. Örneğin grafik ve video MIME türlerini destekleyen bir e-posta sağlayıcısının kullanıcıları bu türden dosyalar içeren e-posta gönderebilir ve alabilir. Her ne kadar MIME'ın kullanımının temeli e-posta içeriğini belirlemek olsa da zamanla kullanımı daha da yaygınlaşmış ve genel anlamda içerik türünü belirtmek için kullanılmaya başlamıştır. Bugün web tarayıcıları ve birçok yazılım birçok farklı dosya türünü destekliyor ve bu sayede farklı türden dosyaları görüntüleyebiliyor.

İçerik türleri en az iki kısımdan oluşmaktadır: tür ve alt-tür. Bunların yanında birkaç farklı özellik daha eklenebilir. Örneğin “text”türünün “html” ve “plain” gibi birçok alt türü bulunmaktadır. Bu içerik türleri de(text/html ve text/plain) karakter kodlaması gibi farklı özellikler içerebilir: text/html; charset=UTF-8.

Genellikle birinci kısım verinin genel türünü belirtmek için kullanılırken ikinci kısım ise bu genel tür içindeki farklı formatları belirtir. Bu sayede içerik türü “text/html” olan bir dosyanın içeriğinin text olduğunu anlamak için programın “html” konusunda bir bilgisinin olması gerekmez. Bu birinci-kısım-türler top-level-media-type(en üst seviye içerik türü) diye adlandırılmaktadır.

Çok yaygın kullanılan 5 farklı ayrık top-level-media-type bulunmaktadır: text, image, audio, video ve application. Bunların yanında iki de bileşik top-level-media-type kullanılmaktadır: multipart ve message.

1- Text Dosya İçerik Türü:

Bu tür, verinin metin olduğunu belirtir. Bu türün en yaygın alt türü ise “plain”dir yani hiçbir format komutu bulunmayan metin türüdür. “plain” alt türlerini yorumlamak için özel bir yazılım gerekmez. Bu alt tür için karakter dizisi de diyebiliriz. Metin içerik türünün “plain” dışında da birçok alt türü bulunmaktadır. Bunlara örnek olarak “richtext” ve “html”i gösterebiliriz.

2- Image Dosya İçerik Türü:

Bu tür, dosya içindeki verinin resim bilgileri içerdiğini belirtir. Bu türdeki verileri gösterebilmek için grafik görüntüleyebilecek bir araç gereklidir. Image türünün alt türlerine örnek olarak çok yaygın kullanılan “jpg”, “gif” ve “png”yi gösterebiliriz.

3- Audio Dosya İçerik Türü:

Bu tür, dosyanın ses verileri içerdiğini belirtir. Bu türdeki dosyaları sergileyebilmek için ses çıkış aracı gereklidir. Örneğin audio türünün “basic” alt türü 8000 Hz tek kanal bir ses dosyasını tanımlar.

4- Video Dosya İçerik Türü:

Bu tür, dosyanın zamana bağlı resim ve ses verileri içerdiğini belirtir. Alt türler videonun formatını veya video hazırlanırken kullanılan teknolojiyi belirtir. Örneğin “video/mpeg” MPEG standartında kodlanmış bir video dosyasını tanımlar.

5- Application Dosya İçerik Türü:

Bu tür diğer kategorilere uymayan dosyaları belirtmek için kullanılmaktadır. Genellikle bir uygulama yazılımının işlediği verileri kaydettiği dosyalar bu türdedir. Bu türün en yaygın alt türü ise “octet-stream”dir. “octet-stream” alt türü yorumlanamayan binary (ikilik) verilerin bulunduğu durumlarda kullanılır.

Dosya İçerik Türü Belirleme

Dosya sisteminde herhangi bir dosyanın içerik türünü belirlemek için bir yöntem bulunmak zorundadır. İşletim sistemleri bu soruna farklı şekillerde yaklaşmaktadır ve her birinin diğerine göre üstün yönleri bulunmaktadır. Modern işletim sistemleri ise çeşitli dosyaları işleyebilmek için tüm bu yaklaşımları kullanmaktadır.

1- Dosya Uzantısı:

Dosyanın içerik türünü belirlemekte kullanılan yaygın yöntemlerinden birisi dosya uzantısıdır. Örneğin GIF resimleri “.gif” ile biten dosya isimleri ile saptanır. Bu yöntem Windows ve Mac OS X gibi birkaç işletim sistemi tarafından kullanılmaktadır.

Fakat bu yöntem kullanıcıların dikkatli olmaması durumunda tehlikeli olabilmektedir. İşletim sistemini dosya uzantılarını gizleyerek kullanan bir kullanıcı “xxx.gif.exe” ismindeki bir virüs dosyası nedeniyle güvenlik sorunu yaşayabilir. Güvenlik sorununun yanında, dosyaların uzantısı bazı sebeplerden dolayı değişmiş olabileceği için bu yöntem sağlıklı değildir.

2- Dahili Üstveri (Internal Metadata):

Dosya içerik türü belirlenirken kullanılan ikinci yöntem ise dosyanın içine türüyle ilgili bir veri depolamaktır. Bu veriler genelde dosyanın başına eklenmektedir ve veri birkaç byte'tan oluşuyorsa “sihirli sayılar” (magic numbers); eğer bu veri birkaç byte'tan fazlaysa da bu bölge “üst bilgi” (header) olarak adlandırılmaktadır.

  • Üst Bilgi (Header):

Her ne kadar üst bilgi olarak adlandırılsa da bu veriler dosyanın en üstünde yani en başında bulunmak zorunda değildir. Üst bilginin konumu dosya formatına veya içindeki verinin türüne göre değişmektedir. Metin dosyalarında karakter tabanlı ve okunabilir üst bilgiler bulunurken, binary (ikilik) veri içeren dosyalarda üst bilgiler de binary olmaktadır. Dosya üst bilgileri, dosya ve içeriğiyle ilgili veriler içermektedir ve bunun yanında dosyanın içeriğini belirleyen algoritmaların kullanacağı türden bilgiler de içerebilir. Örneğin çoğu resim dosyasında resmin boyutu ve çözünürlüğü ile ilgili veriler bulunmaktadır. Bunun yanında bazen dosyayı kimin nerede ve ne zaman oluşturduğu ve ne tür kamera ve çekim teknikleri kullanıldığı şeklinde bilgiler de içerebilir. Herhangi bir program bu üst bilgileri okuyup yorumlayarak kullanabilir.

Fakat üst bilginin yeri her dosyada sabit olmadığından bu yöntem ile dosya içerik türü belirlemek çok fazla arama ve I/O zamanı harcamaktadır. Ayrıca binary üst bilgilerin yanlış yorumlanma ihtimali de bulunmaktadır.

  • Sihirli Sayılar (Magic Numbers)

Dosyaların başında o dosyanın türüne özel birkaç byte dizisi depolanmaktadır. Bu byte dizisi sayı olarak da yorumlanabileceği için “sihirli sayılar” olarak adlandırılmaktadır. Sihirli sayılar belirli dosya türüne ait olduğu için bir dosyanın içerik türünü belirlemekte kullanılmaktadırlar. Örneğin gif dosyaları ASCII kodlamasıyla “GIF87a” veya “GIF89a” ile başlamaktadır. Fakat birçok dosya türü, özellikle plain text (metin) dosyaları, sihirli sayı içermemektedir ve bu nedenle sihirli sayılar yöntemiyle içerik türlerinin belirlenmesi çok zordur. Örneğin HTML dosyaları "<html>" stringiyle veya “<!DOCTYPE” yani belge tür tanımı ile başlar.

Bu yöntem diğer yöntemlerle göre çok daha sağlıklı sonuçlar vermektedir ve dosya hakkında daha kesin bilgiler sağlamaktadır. Fakat sihirli sayılar yönteminin diğer yöntemlere göre verimsiz olduğunu söyleyebiliriz; özellikle de büyük bir dosya listesinin tek tek türlerinin belirlenmesi gerektiği durumlarda. Çünkü bu yöntem dosyanın birkaç byte'lık içeriğini sihirli sayıların tutulduğu veritabanı ile tek tek karşılaştırmaktadır. Verimsiz olmasına rağmen sihirli sayılar yöntemi en güvenilir yöntem olduğu için yaygın olarak kullanılmaktadır.

3- Harici Üstveri (External Metadata):

Dosya içerik belirleme yöntemlerinin sonuncusu olan harici üstveri yöntemi dosyaların içeriği ile ilgili verileri dosyanın içine kaydetmek yerine harici olarak dosya sistemine kaydeder. Bu yöntem üstveriyi dosya verisinden ve dosya isminden ayrı tutar. Fakat bu yöntem taşınabilir dosyalar için uygun değildir. Bu nedenle kullanımı diğer yöntemlere göre daha az ve kısıtlıdır.