POSIX terminal arayüzü - POSIX terminal interface

POSIX terminal arayüzü her ikisini de içeren genelleştirilmiş soyutlamadır uygulama programlama Arayüzü programlar için ve bir şirketin kullanıcıları için bir dizi davranışsal beklenti terminal tarafından tanımlandığı gibi POSIX standart ve Tek Unix Spesifikasyonu. BSD sürüm 4'ün terminal arayüzlerinden tarihsel bir gelişmedir ve Yedinci Sürüm Unix.

Genel temel kavramlar

Donanım

Unix sistemlerinde çok sayıda I / O cihazı "terminaller" olarak kabul edilir.[1][2] Bunlar şunları içerir:

Terminal zekası ve yetenekleri

Zeka: terminaller aptaldır, zeki değildir

Ana bilgisayarından ve mini bilgisayardan farklı olarak[kaynak belirtilmeli ] çağdaşlar, orijinal Unix sistemi yalnızca aşağıdakiler için geliştirilmiştir: aptal terminaller ve bu bugünkü durumdur.[6] Bir terminal, cihazdan alınan ve cihaza gönderilen karakter akışlarını içeren karakter odaklı bir cihazdır.[6][7] Karakter akışları yapılandırılmış olsa da kontrol karakterleri, kaçış kodları G / Ç protokolü, G / Ç protokolü gibi yapılandırılmamıştır. akıllıveya akıllı, terminaller. Alan formatı spesifikasyonu yoktur. Giriş verilerinin tüm ekranlarının (giriş formları) blok iletimi yoktur.

Buna karşılık, kapalı mimarilerdeki ana bilgisayarlar ve mini bilgisayarlar genellikle Blok odaklı terminaller.

Yetenekler: terminfo, termcap, curses, vd.

Bir terminalin "yetenekleri", programların kullanabileceği, saf bir teletip yazıcının üzerinde ve ötesinde olan çeşitli aptal terminal özelliklerini içerir. Bunlar (esas olarak) terminale gönderilebilen veya terminalden alınabilen kaçış kodlarını içerir. Terminale gönderilen kaçış kodları, bir CRT terminalinin (veya yazılım terminal öykünücüsünün) bir teletip yazıcının yapamayacağı çeşitli işlevleri yerine getirir; örneğin, terminalin imlecini ekrandaki konumlara taşımak, ekranın tamamını veya bir kısmını silmek ve kaydırmak , takılı yazıcı aygıtlarını, programlanabilir işlev tuşlarını, ekran renklerini ve özniteliklerini (örn. ters video ) ve başlık dizelerini görüntüleme. Terminalden alınan kaçış kodları aşağıdaki gibi şeyleri ifade eder: fonksiyon tuşu, ok tuşu ve diğer özel tuş vuruşları (ev anahtarı, son anahtar, yardım anahtarı, PgUp anahtarı, PgDn anahtarı, anahtar ekle, anahtarı sil vb.).[8][9]

Bu yetenekler, bir sistem yöneticisi tarafından yapılandırılan ve programlardan erişilen veritabanlarında kodlanmıştır. terminfo kütüphane (eski olanın yerini alan termcap kütüphane), bunun üzerine sırayla kütüphaneler inşa edilir. küfürler ve ncurses kütüphaneler. Uygulama programları, terminal yeteneklerini kullanarak metinsel kullanıcı arayüzleri pencereler, diyalog kutuları, düğmeler, etiketler, giriş alanları, menüler vb.[10][11]

Ortam değişkenlerini kontrol etme: SÜRE et al.

Bir (uçbirime duyarlı) programın girdi ve çıktılarının kullandığı uçbirim için belirli yetenekler seti, programlara ve kitaplıklara bağlanmak yerine veritabanından elde edilir ve SÜRE Çevre değişkeni (ve isteğe bağlı olarak termcap ve terminfo kitaplıkları için, TERMCAP ve TERMİNFO sırasıyla ortam değişkenleri).[10] Bu değişken ne tarafından belirlenir terminal monitörü program, daha sonra bu terminali girdi ve çıktı olarak veya bazen açıkça kullanan programları üretir. Örneğin:

  • Getty programı (veya eşdeğeri) ayarlar SÜRE bir sistem veritabanına göre ortam değişkeni (çeşitli Inittab veya için yapılandırma dosyaları ttymon veya Launchd programlar) hangi yerel terminallerin hangi seri bağlantı noktalarına eklendiğini ve hangi terminal türlerinin yerel sanal terminaller veya yerel sistem konsolu tarafından sağlandığını tanımlamak.
  • Uzak bir terminaldeki çevirmeli bağlantı kullanıcısı, sistemin o çevirmeli hatta genellikle beklediği terminal türünü kullanmadığından, SÜRE doğru türde oturum açtıktan hemen sonra ortam değişkeni. (Daha genel olarak, sistem yöneticisinin en sık uzak terminallere sahip çevirmeli kullanıcılar tarafından kullanıldığını belirlediği, çevirmeli hat için getty programı tarafından ayarlanan terminal tipi, çevirmeli ağ kullanıcısı tarafından kullanılanla eşleşir ve bu kullanıcının terminal tipini geçersiz kılmasına gerek yoktur.)
  • SSH sunucu arka plan programı (veya eşdeğeri, rlogin daemon) ayarlar SÜRE ortam değişkeni SSH istemcisiyle aynı terminal türüne.[12]
  • Bir sözde terminal kullanan yazılım terminal öykünücüsü, SÜRE ortam değişkeni taklit ettiği uçbirimin türünü belirtmek için. Öykünülmüş terminaller genellikle gerçek terminal donanımıyla tam olarak eşleşmez ve terminal emülatörlerinin kullanımları için ayrılmış tip adları vardır. Xterm programı (varsayılan olarak) ayarlar xterm örneğin terminal tipi olarak.[13] GNU Ekranı program setleri ekran terminal tipi olarak.

İş kontrolü

Terminaller iş kontrol olanakları sağlar. Etkileşimli olarak, terminaldeki kullanıcı o anda çalışmakta olan işi askıya alan kontrol karakterleri gönderebilir, işi ortaya çıkaran etkileşimli iş kontrol kabuğuna geri dönebilir ve işleri "arka plana" yerleştiren veya başka bir arka planı, işi değiştiren komutları çalıştırabilir. ön plana (gerekirse askıya alma).[14][15]

Hat disiplinleri

Açıkça söylemek gerekirse, Unices'de bir terminal cihazı, temel tty aygıt sürücüsü, G / Ç talimatları aracılığıyla cihaz donanımının fiziksel kontrolünden ve karakter girişi ve çıkışı için cihaz kesinti taleplerinin işlenmesinden sorumlu ve hat disiplini. Bir hat disiplini, gerçek cihaz donanımından bağımsızdır ve aynı hat disiplini, bir terminal toplayıcı bir pseudoterminal için olduğu gibi çoklu kontrol terminallerinden sorumlu cihaz. Aslında, hat disiplini (veya BSD, AIX ve diğer sistemler söz konusu olduğunda, hat disiplinler) tüm terminal cihazlarında aynıdır. Yerel yankı, satır düzenleme, giriş modlarının işlenmesi, çıktı modlarının işlenmesi ve karakter eşlemesinden sorumlu olan satır disiplinidir. Tüm bunlar, tty aygıt sürücülerinin sağladığı basit soyutlamalarda olduğu gibi gerçek donanımdan bağımsızdır: bir karakter iletin, bir karakter alın, çeşitli donanım durumlarını ayarlayın.[16][17]

İçinde Yedinci Sürüm Unix, BSD sistemler ve türevler dahil Mac os işletim sistemi, ve Linux Her bir terminal cihazı, birden çok hat disiplini arasında değiştirilebilir.[18] AT & T'de CANLI YAYINLAR sistem, hat disiplinleri, bir STREAMS I / O yığını üzerine itilip çıkarılabilen STREAMS modülleridir.[19]

Tarih

POSIX terminal arayüzü, çeşitli Unix sistemlerinin terminal arayüzlerinden türetilmiştir.

Early Unices: Seventh Edition Unix

Unix 32V ve Seventh Edition Unix tarafından sağlanan ve ayrıca BSD sürüm 4 tarafından sunulan terminal arabirimi eski terminal sürücüsü, basitti, büyük ölçüde terminal olarak teletyazıcılara yönelikti. Giriş, her seferinde bir satıra girildi ve işletim sistemindeki terminal sürücüsü (terminallerin kendisinde değil) basit satır düzenleme yetenekleri sağlıyordu. Düzenlemenin gerçekleştiği çekirdek tarafından bir arabellek sağlandı. Terminal girişini okuyan uygulamalar, tamponun içeriğini yalnızca dönüş Satır düzenlemesini sonlandırmak için terminalde tuşuna basıldı. @ uçbirimden sisteme gönderilen anahtar, düzenleme arabelleğinin tüm geçerli içeriğini siler ("öldürür") ve normalde bir '@'sembolünü ve ardından yeni bir satır sırası ile yazdırma konumunu yeni bir boş satıra taşımak için. # Terminalden sisteme gönderilen anahtar, düzenleme arabelleğinin sonundaki son karakteri siler ve normalde bir '#Kullanıcıların önceki karakterin bir "kazınmasını" belirtmek zorunda kalacağı sembol (teletip yazanlar, kağıda basıldıktan sonra karakterleri fiziksel olarak silmeye muktedir değildir).[20][21][22][23][18]

Programlama açısından bakıldığında, bir terminal cihazı iletim ve alım yapmıştır baud hızları, "sil" ve "öldür" karakterleri (açıklandığı gibi satır düzenlemesini gerçekleştiren), "interrupt" ve "quit" karakterleri (oluşturma sinyaller terminalin bir kontrol terminali olduğu tüm süreçler için), "start" ve "stop" karakterleri ( modem akış denetimi ), bir "dosya sonu" karakteri (bir satırbaşı gibi davranır, ancak oku () sistem çağrısı ve bu nedenle potansiyel olarak sıfır uzunluklu bir sonucun döndürülmesine neden olur) ve çeşitli temel mod işaretleri olup olmadığını belirlemek yerel yankı modem akış kontrolünün etkinleştirilip etkinleştirilmediği, çeşitli çıkış gecikmelerinin uzunlukları, şaryo dönüş karakteri için eşleme ve üç giriş modu, çekirdeğin uçbirim sürücüsü tarafından taklit edildi.[24]

Üç giriş modu şunlardı:

satır modu ("pişmiş" mod da denir)

Satır modunda, satır disiplini tüm satır düzenleme işlevlerini yerine getirir ve "kesme" ve "çıkış" kontrol karakterlerini tanır ve bunları işlemlere gönderilen sinyallere dönüştürür. Terminalden okuyan uygulama programları, kullanıcı tarafından return tuşuna basarak satır düzenlemesi tamamlandıktan sonra tüm satırları alır.[21][25]

cbreak modu

cbreak modu, bir seferde iki karakter modundan biridir. (Stephen R. Bourne şaka yollu ona gönderme yaptı (Bourne 1983, s. 288) "yarı pişmiş" ve dolayısıyla "nadir" mod olarak.) Satır disiplini, satır düzenleme yapmaz ve satır düzenleme işlevleri için kontrol dizileri normal karakter girdisi olarak değerlendirilir. Terminalden okuyan uygulama programları, karakterleri kullanılabilir olduklarında hemen alırlar. giriş sırası okunacak. Bununla birlikte, "kesme" ve "çıkma" denetim karakterlerinin yanı sıra modem akış denetimi karakterleri, yine de özel olarak işlenir ve giriş akışından çıkarılır.[26][27]

ham mod
ham mod, bir seferde iki karakter modundan diğeridir. Satır disiplini satır düzenleme yapmaz ve hem satır düzenleme işlevleri hem de çeşitli özel karakterler ("kesme", "çıkma" ve akış kontrolü) için kontrol dizileri normal karakter girdisi olarak kabul edilir. Terminalden okuyan uygulama programları, karakterleri anında alır ve tüm karakter akışını, tıpkı terminal cihazından geldiği gibi değiştirmeden alır.[28][26][27]

Tüm bu modları ve kontrol karakterlerini sorgulamak ve değiştirmek için programlı arayüz, ioctl () sistem çağrısı. (Bu, stty () ve gtty () Altıncı Sürüm Unix'in sistem çağrıları.)[29][30] "Silme" ve "öldürme" karakterleri varsayılan değerlerinden değiştirilebilir olsa da # ve @, uzun yıllar boyunca bunlar terminal aygıt sürücülerinde ve çalışan sistem oturum açma komut dosyalarında yalnızca oturum açma işleminin bir parçası olarak terminal aygıt ayarlarını değiştiren birçok Unix sisteminde önceden ayarlanmış varsayılanlardır. sonra kullanıcı kullanıcı adı ve parolayı girmişti, oturum açma ve parola istemlerindeki herhangi bir hata, teletypewriter terminallerinden miras alınan geçmiş düzenleme anahtar karakterleri kullanılarak düzeltilmeliydi.[23]

BSD: iş kontrolünün ortaya çıkışı

BSD Unices ile birlikte geldi iş kontrolü ve bir yeni terminal sürücüsü genişletilmiş yeteneklere sahip.[18] Bu uzantılar ek (yine programla değiştirilebilir) özel karakterler içeriyordu:

  • "Askıya alma" ve "gecikmeli askıya alma" karakterleri (varsayılan olarak Kontrol+Z ve Kontrol+Y - ASCII ALT ve EM ) yeni bir SIGTSTP terminalin kontrol süreci grubundaki süreçlere sinyal.[27]
  • "Sözcük silme", ​​"sonraki değişmez" ve "yeniden yazdırma" karakterleri (varsayılan olarak Kontrol+W, Kontrol+V, ve Kontrol+R - ASCII ETB, SYN, ve DC2 ) ek satır düzenleme işlevleri gerçekleştirdi. "sözcük silme", ​​satır düzenleme arabelleğinin sonundaki son sözcüğü sildi. "literal next" herhangi bir özel karakterin satır düzenleme arabelleğine girilmesine izin verdi (Yedinci Sürüm Unix'te ters eğik çizgi karakteri aracılığıyla biraz uygunsuz bir şekilde kullanılabilir bir işlev). "yeniden yazdırma", satır disiplininin satır düzenleme arabelleğinin mevcut içeriğini yeni bir satırda yeniden yazdırmasına neden oldu (başka, arka plan, işlem satır düzenlemeyle karışan çıktı ürettiğinde kullanışlıdır).[27]

Tüm bu ekstra modları ve kontrol karakterlerini sorgulamak ve değiştirmek için programlı arayüz, ioctl () sistem çağrısı, yaratıcılarının (Leffler vd. 1989, s. 262) "oldukça karmaşık bir arayüz" olarak tanımlanmıştır. Orijinal Yedinci Sürüm Unix işlevlerinin tümü korundu ve yeni işlevler ek olarak eklendi ioctl () açıkça büyüyen ve bazı işlevsellik kopyaları sunan programlı bir arayüzle sonuçlanan işlem kodları.[31]

Sistem III ve Sistem V

Sistem III Yedinci Sürüm'ün ayrı sürümünü birleştiren yeni bir programlama ioctl () bayrakları alma ve ayarlama ve kontrol karakterlerini bir termio hem bayrakları hem de kontrol karakterlerini tutacak ve onları tek bir işlemde alıp başka bir işlemde ayarlayabilecek yapı. Ayrıca, Yedinci Sürüm arayüzündeki bazı bayrakları birden çok ayrı bayrağa böldü ve 4BSD'nin iş kontrolünü veya pişmiş mod geliştirmelerini desteklemese de bazı ek yetenekler ekledi.[32] Örneğin, Seventh Edition'ın "pişmiş", "cbreak" ve "raw" modlarını farklı soyutlamalarla değiştirdi. Sinyal üreten karakterlerin tanınması giriş modundan bağımsızdır ve yalnızca iki giriş modu vardır: kanonik ve kanonik olmayan. (Bu, Yedinci Baskı ve BSD'de olmayan bir terminal giriş moduna izin verir: sinyal oluşturmanın devre dışı bırakıldığı kanonik mod.)

Sistem III'ün halefleri: Sistem V, aynı arayüzü kullandı.

POSIX: Konsolidasyon ve soyutlama

POSIX standardının genel bir terminal arayüzü tanımıyla ele aldığı en büyük sorunlardan biri, programatik arayüzlerin bolluğuydu. Standart zamana kadar terminallerin davranışı sistemden sisteme oldukça tekdüze olmasına rağmen, çoğu Ünite hat disiplinleri kavramlarını ve BSD iş kontrol yeteneklerini benimsemiş, terminallere programlı arayüz ioctl () sistem çağrısı bir karmaşaydı. Farklı Unices farklı tedarik edilir ioctl () farklı (sembolik) isimler ve farklı bayraklarla işlemler. Taşınabilir kaynak kodunun, hepsi kavramsal olarak Unix olmasına rağmen, yazılım platformları arasındaki farklılıkları barındırmak için önemli miktarda koşullu derleme içermesi gerekiyordu.[33]

POSIX standardı, ioctl () sistem tamamen, bir dizi kütüphane işleviyle (tabii ki, uygulandı platforma özel olarak kapakların altında ioctl () işlemler) standartlaştırılmış isimler ve parametrelerle. termio System V Unix'in veri yapısı POSIX için şablon olarak kullanıldı termios alanları büyük ölçüde değişmemiş olan veri yapısı, şu anda alanları belirtmek için takma ad veri türlerini kullanmaları ve bunların, birden çok işlemci mimarisinde uygulayıcılar tarafından açıkça imzasız kısa ve kömür C ve C ++ programlama dillerinin veri türleri (bazı işlemci mimarilerinde uygun olmayan boyutlar olabilir).[33][34]

POSIX ayrıca iş kontrolü için destek de getirdi. termios Sistem III ve Sistem V tarafından desteklenen kontrol karakterlerine ek olarak askıya alma ve geciktirme-askıya alma karakterlerini içeren yapı, BSD'deki pişmiş mod uzantılarının hiçbirini eklemedi, ancak SunOS 4.x, System V Sürüm 4, Solaris, HP-UX, AIX, daha yeni BSD'ler, Mac os işletim sistemi, ve Linux bunları uzantı olarak uyguladı termios.

Standart ne tanımlar

Terminalleri ve süreç gruplarını kontrol etme

Her biri süreç sistemde tek bir kontrol terminaliveya hiç kontrol terminali yok. Bir süreç, kendi kontrol terminalini üstünden devralır ve bir proses üzerindeki tek operasyon, kontrol terminali olmayan bir proses tarafından kontrol terminali edinmesi ve kontrol terminaline sahip bir proses tarafından bırakılmasıdır.[33]

Bir kontrol terminali edinmenin taşınabilir bir yolu tanımlanmamıştır, yöntem uygulama tanımlanmıştır. Standart, O_NOCTTY için bayrak açık() sistem çağrısı yolu bu önleyici aksi halde bir kontrol terminali edinmenin geleneksel yolu nedir (kontrol terminali olmayan bir süreç) açık()s, başka bir işlem için kontrol terminali olmayan bir terminal cihaz dosyası, O_NOCTTY bayrak[35]) ancak geleneksel semantiğini isteğe bağlı bırakır.

Her süreç aynı zamanda bir süreç grubunun üyesidir. Her uçbirim cihazı, kendi ön plan süreç grubu. İşlem grupları, terminal erişimini ve sinyal iletimini kontrol eder. Terminalde üretilen sinyaller, terminalin ön plan süreç grubunun üyeleri olan tüm süreçlere gönderilir. oku () ve yazmak() Terminalin ön plan işlem grubunun üyesi olmayan bir süreç tarafından bir terminal üzerindeki G / Ç işlemleri, isteğe bağlı olarak (sırasıyla) sinyallere (SIGTTIN ve SIGTTOU sırasıyla) çağırma sürecine gönderilecek. Çeşitli uçbirim modu değiştiren kitaplık işlevleri, yazmak(), ancak bu işlevsellik için kapalı olsa bile her zaman sinyal üretmeleri dışında yazmak() kendisi.[36][37]

termios veri yapısı

Tüm terminal kitaplık çağrıları tarafından kullanılan veri yapısı, termios yapı[38] C ve C ++ programlama dili tanımı aşağıdaki gibidir:[34]

yapı termios {    tcflag_t c_iflag ;  // Giriş modları    tcflag_t c_oflag ;  // Çıkış modları    tcflag_t c_cflag ;  // Kontrol modları    tcflag_t c_lflag ;  // Yerel modlar    cc_t c_cc[NCCS] ;   // Kontrol karakterleri} ;

İçindeki alanların sırası termios yapı tanımlanmamıştır ve uygulamaların standart olmayan alanlar eklemesine izin verilir.[34] Aslında, uygulamalar giriş ve çıkış baud hızlarını kaydetmek için standart olmayan alanlar eklemek zorundadır. Bunlar, yapıya, uygulama tanımlı bir biçimde kaydedilir ve standartlaştırılmış yapı alanlarında olduğu gibi alan değerlerinin doğrudan manipülasyonu yerine erişimci işlevleri aracılığıyla erişilir.[39]

Veri türü takma adları tcflag_t ve cc_tyanı sıra sembolik sabit NCCS ve çeşitli mod bayrakları, kontrol karakter isimleri ve baud hızları için tüm sembolik sabitler, standart bir başlıkta tanımlanmıştır. termios.h. (Bu, benzer şekilde adlandırılmış başlık ile karıştırılmamalıdır termio.h benzer bir tanımlayan System III ve System V'den termio yapı ve benzer şekilde adlandırılmış sembolik sabitler. Bu arabirim System III ve System V'e özgüdür ve onu kullanan kod diğer sistemlere taşınabilir olmayabilir.)[40]

Yapının alanları (özet olarak, ayrıntılar için ana makaleye bakın[açıklama gerekli ]):

c_iflag
giriş paritesini, giriş satırsonu çevirisini, modemi kontrol etmek için giriş modu bayrakları akış kontrolü, 8 bit temizlik ve bir (seri bağlantı noktalarına) yanıt "mola" koşulu[34]
c_oflag
Uygulama tanımlı çıktı son işlemeyi, çıktı satırsonu çevirisini ve çeşitli kontrol karakterleri gönderildikten sonra çıktı gecikmelerini kontrol etmek için çıktı modu bayrakları[41][27]
c_cflag
hat disiplini yerine gerçek terminal cihazını kontrol etmek için terminal donanım kontrol bayrakları: bir karakterdeki bit sayısı, eşlik türü, kapatma kontrolü ve seri hat akış kontrolü[42]
c_lflag
Terminal donanımından ziyade hat disiplinini kontrol etmek için yerel kontrol bayrakları: kanonik mod, yankı modları, sinyal oluşturma karakter tanıma ve işleme ve SIGTTOU tarafından sinyal yazmak() sistem çağrısı[39]

Kütüphane işlevleri (özet olarak, ayrıntılar için ana makaleye bakın[açıklama gerekli ]):

tcgetattr ()
bir terminal cihazının mevcut öznitelik ayarlarını bir termios yapı[43]
tcsetattr ()
bir terminal cihazının mevcut öznitelik ayarlarını bir termios yapı, isteğe bağlı olarak sıradaki çıktının boşaltılması ve sıraya alınmış girdinin temizlenmesi için bekleme[43]
cfgetispeed ()
bir uygulamadaki uygulama tanımlı alanlardan giriş baud hızını sorgulayın termios yapı[44]
cfgetospeed ()
bir uygulama tanımlı alanlardan çıktı baud hızını sorgulayın termios yapı[44]
cfsetispeed ()
giriş baud hızını uygulama tanımlı alanlarda bir termios yapı[44]
cfsetospeed ()
bir uygulama tanımlı alanlarda çıktı baud hızını ayarlayın termios yapı[44]
tcsendbreak ()
seri cihaz terminalinde modem "kırılma" sinyali gönder[45]
tcdrain ()
sıradaki çıktının boşalmasını bekleyin[45]
tcflush ()
sıradaki girdiyi sil[45]
tcflow ()
akış kontrolünü değiştir[45]
tcgetpgrp ()
terminalin ön plan işlem grubunu sorgulayın[46]
tcsetpgrp ()
terminalin ön plan işlem grubunu ayarlayın[46]

Özel karakterler

Programla değiştirilebilir özel karakterler[47][44]
AlananlamTarafından alındı oku ()Notlar
c_cc [VEOF]dosyanın sonuHayırYalnızca kanonik modda satır düzenlemeyle işlenir
c_cc [VEOL]yolun sonuEvetYalnızca kanonik modda satır düzenlemeyle işlenir
c_cc [VERASE]"sil"HayırYalnızca kanonik modda satır düzenlemeyle işlenir
c_cc [VKILL]"öldürmek"HayırYalnızca kanonik modda satır düzenlemeyle işlenir
c_cc [VINTR]"kesmek"HayırGiriş modundan bağımsız sinyal oluşturma karakteri
c_cc [VQUIT]"çık"HayırGiriş modundan bağımsız sinyal oluşturma karakteri
c_cc [VSUSP]"askıya al"HayırGiriş modundan bağımsız sinyal oluşturma karakteri
c_cc [VSTOP]"Dur"HayırGiriş modundan bağımsız modem akış kontrol karakteri
c_cc [VSTART]"Başlat"HayırGiriş modundan bağımsız modem akış kontrol karakteri

c_cc [] dizi üyesi termios veri yapısı, tüm (program yoluyla değiştirilebilir) özel karakterleri belirtir. Dizideki dizinler, sağdaki tabloda olduğu gibi her özel karakter türü için bir tane olmak üzere sembolik sabitlerdir. (Dizideki diğer iki giriş, kanonik olmayan mod giriş işlemeyle ilgilidir ve aşağıda tartışılmıştır.)[43]

Program aracılığıyla değiştirilemeyen özel karakterler satır besleme (ASCII LF) ve satırbaşı (ASCII CR).[47]

Giriş işleme

Girdi işlemenin davranışını belirler. oku () bir terminal cihazında sistem çağrısı ve hat disiplininin hat düzenleme ve sinyal oluşturma özellikleri. Yedinci Baskı Unix ve BSD sürüm 4'ün aksine ve System III ve System V'de olduğu gibi, satır düzenleme yalnızca iki moddan birinde çalışır: kanonik mod ve kanonik olmayan mod. Aralarındaki temel fark, engelleme / engellememe gereksinimleri açısından bakıldığında oku () sistem çağrısı (ile belirtilir O_NONBLOCK üzerinde bayrak dosya tanımlayıcı üzerinden açık() veya fcntl ()), veriler "okunabilir".[48]

Kanonik mod işleme

Kanonik modda, veriler bir satır düzenleme arabelleğinde toplanır ve kullanıcı tarafından (terminalde) satır düzenleme işlemi sonlandırılana kadar "okunabilir" hale gelmez. satır ayırıcı karakter. Satır sınırlayıcı karakterler özel karakterlerdir ve dosyanın sonu, yolun sonu, ve satır besleme (ASCII LF). İlk ikisi programlı olarak ayarlanabilirken, ikincisi sabittir. Son ikisi, satır düzenleme arabelleğine dahil edilirken, birincisi değildir.[49]

Daha kesin olarak, satır düzenleme arabelleğinde sıfır veya daha fazla satır biriktirilir, satır sınırlayıcılarla ayrılır (bunlar bir kez atılabilir veya kaldırılmayabilir) oku () bunları okumaya gelir) ve satır düzenleme, satır düzenleme arabelleğinin arabellekteki son (varsa) satır sınırlayıcısını izleyen kısmı üzerinde çalışır. Bu nedenle, örneğin, "silme" karakteri (programlanan her ne ise), satır arabelleğindeki son karakteri yalnızca bir önceki satır sınırlayıcısına kadar (ancak dahil değil) siler.[49]

Standart olmayan mod işleme

Kanonik olmayan modda, veriler bir arabellekte toplanır (satır düzenleme arabelleği olabilir veya olmayabilir - bazı uygulamalar ayrı "işlenmiş girdi" ve "ham girdi" kuyruklarına sahiptir) ve değerlere göre "okunabilir" hale gelir. iki giriş kontrol parametresinden, c_cc [MIN] ve c_cc [TIME] üyeleri termios veri yapısı. Her ikisi de işaretsiz miktarlardır (çünkü cc_t işaretsiz bir tür için bir takma ad olması gerekir). İlki minimum karakter sayısını belirtir ve ikincisi saniyenin onda biri cinsinden bir zaman aşımı belirtir.[50] Dört olasılık vardır:

c_cc [TIME] ve c_cc [MIN] ikisi de sıfır
Bu durumda, arabellekteki veriler hemen "okunmaya hazır" olur ve oku () arabellekte ne olursa olsun hemen döndürür (sıfır veri varsa potansiyel olarak sıfır döndürür).[51]
c_cc [TIME] sıfır değildir ve c_cc [MIN] sıfır
Bu durumda, arabellekteki veriler, belirtilen zaman aşımı süresi geçtikten sonra "okunmaya hazırdır", zamanlayıcı, oku () sistem çağrısı veya tek bir karakter alınırsa. Diğer bir deyişle, oku () maksimum belirtilen toplam süre için bekler ve sıfır veri döndürebilir ve herhangi bir veriyi alınır alınmaz döndürür.[51]
c_cc [TIME] sıfırdır ve c_cc [MIN] sıfır değil
Bu durumda, arabellekte belirtilen sayıda karakter alındıktan sonra arabellekteki veriler "okunabilir" durumdadır. Diğer bir deyişle, oku () minimum miktarda veri bekler (bu, arayanın sistem çağrısında okumaya hazır olduğundan daha büyük olabilir), sıfır veri döndürmez ve sonsuza kadar bekleyebilir.[51]
c_cc [TIME] ve c_cc [MIN] ikisi de sıfır değil
Bu durumda, arabellekteki veriler, belirtilen sayıda karakter arabellekte alındıktan sonra veya son karakter girildikten sonra zaman aşımı sona erdikten sonra "okunabilir" durumdadır. İlk karakter için zaman aşımı yoktur. Diğer bir deyişle, oku () minimum miktarda veriyi bekler (arayanın sistem çağrısında okumaya hazır olduğundan daha büyük olabilir), sıfır veri döndürmez, süresiz olarak bekleyebilir, ancak en az bir ise belirtilen zaman aşımından daha uzun süre beklemeyecektir. karakter okunacak arabellekte.[51]

Çıktı işleme

Çıktı işleme, System III / System V köklerinden büyük ölçüde değişmez. Çıkış modu kontrol bayrakları çeşitli seçenekleri belirler:

  • Taşıma iadeleri Unix yeni satır semantiğini birçok terminalin beklediği ASCII semantiğine çevirmek için her satır besleme karakterinin önüne eklenebilir.[27][22]
  • Terminallere, arka boşluklar, yatay sekmeler, taşıma gibi (bilgisayarın bakış açısından) önemli miktarda zaman alabilen (bilgisayar açısından) önemli miktarda zaman alabilen (bir teletyazıcıda veya benzerinde) vagonun fiziksel hareketlerine neden olacak çeşitli kontrol kodlarını kullanmaları için zaman verilebilir. döner, form beslemeleri ve satır beslemeleri.[27][52]

Notlar

  1. ^ a b c Christian 1988, s. 11.
  2. ^ Bourne 1983, s. 6.
  3. ^ Coffin 1991, s. 820.
  4. ^ Coffin 1991, s. 23–24.
  5. ^ Leffler vd. 1989, s. 259.
  6. ^ a b Coffin 1991, s. 24.
  7. ^ Leffler vd. 1989, s. 37–38.
  8. ^ Afzal 2008, s. 419.
  9. ^ Frisch 2002, s. 770.
  10. ^ a b Coffin 1991, s. 115.
  11. ^ Coffin 1991, s. 372.
  12. ^ Coffin 1991, s. 779.
  13. ^ Coffin 1991, s. 751–752.
  14. ^ Leffler vd. 1989, s. 265.
  15. ^ Leffler vd. 1989, s. 103.
  16. ^ Leffler vd. 1989, s. 38.
  17. ^ Leffler vd. 1989, s. 260–261.
  18. ^ a b c Leffler vd. 1989, s. 262.
  19. ^ Christian 1988, s. 395.
  20. ^ Bourne 1983, s. 8.
  21. ^ a b Bourne 1983, s. 130–131.
  22. ^ a b Bourne 1983, s. 287.
  23. ^ a b Christian 1988, s. 26.
  24. ^ Bourne 1983, s. 132–133.
  25. ^ Leffler vd. 1989, s. 259–260.
  26. ^ a b Bourne 1983, s. 288.
  27. ^ a b c d e f g Leffler vd. 1989, s. 260.
  28. ^ Bourne 1983, s. 132.
  29. ^ Bourne 1983, s. 133.
  30. ^ Christian 1988, s. 393.
  31. ^ Leffler vd. 1989, s. 262–263.
  32. ^ "System III tty (4) man page source". Alındı 5 Ekim 2012.
  33. ^ a b c Zlotnick 1991, s. 157.
  34. ^ a b c d Zlotnick 1991, s. 163.
  35. ^ Bourne 1983, s. 130.
  36. ^ Zlotnick 1991, s. 158.
  37. ^ Zlotnick 1991, s. 173–174.
  38. ^ Zlotnick 1991, s. 162.
  39. ^ a b Zlotnick 1991, s. 166.
  40. ^ Zlotnick 1991, s. 162–163.
  41. ^ Zlotnick 1991, s. 164.
  42. ^ Zlotnick 1991, s. 165.
  43. ^ a b c Zlotnick 1991, s. 167.
  44. ^ a b c d e Zlotnick 1991, s. 169.
  45. ^ a b c d Zlotnick 1991, s. 172.
  46. ^ a b Zlotnick 1991, s. 174.
  47. ^ a b Zlotnick 1991, s. 159.
  48. ^ Zlotnick 1991, s. 160.
  49. ^ a b Zlotnick 1991, s. 160–161.
  50. ^ Zlotnick 1991, s. 161.
  51. ^ a b c d Zlotnick 1991, s. 161–162.
  52. ^ Bourne 1983, s. 287–288.

Kaynaklar

daha fazla okuma