Stdin girişinin sonunu nasıl bildirirsiniz?


82
  1. Bash'de, bitiş sinyalinin bu belgeyle değiştirilebileceğini öğrendim. Fakat varsayılan olarak stdin girişinin sonunu nasıl işaret edebilirim?
  2. Cat ve chardet ile stdin girişlerinin Ctrl + d ile bittiği gibi sinyal verilebileceğini öğrendim. Ancak Ctrl + d ve Ctrl + c'nin çalışan bir komutun yürütülmesine son verdiğine benzer olduğunu hatırlıyorum. Yani yanlış mıyım?

Yanıtlar:


114

Ctrl+D, bir terminalde bir satırın başlangıcında yazıldığında, girişin sonunu belirtir. Bu, unix anlamında bir sinyal değildir : bir uygulama terminalden okurken ve kullanıcı bastığında, başvuruya, Ctrl+Ddosyanın sonuna ulaşıldığı bildirilir (tıpkı bir dosyadan okuyorsa ve son bayt).

Ctrl+Cbir sinyal gönderir, SIGINT . Varsayılan olarak SIGINT (kesinti sinyali) ön plan uygulamasını öldürür, ancak uygulama sinyali yakalayabilir ve farklı bir şekilde tepki verebilir (örneğin, kabuğun kendisi sinyali yakalar ve yazmaya başladığınız satırı durdurur, ancak t çıkmak, yeni bir komut istemi gösterir ve yeni bir komut satırı bekler).

Sonunda dosyasonu ile ve SIGINT ilişkili karakterleri değiştirebilir sttykomutu, örneğin stty eof ayapacak asonu dosyaya karakterini ve stty intr ^-SIGINT karakterini devre dışı olur. Bu nadiren kullanışlıdır.


Teşekkürler! Does Ctrl+DCtrl ve ortalama sermaye D veya fark etmez?
Tim

5
@Tim: istediğiniz küçük harf ... klavye komutlarının büyük harflerle yazılması kuralları gelir çünkü klavyedeki etiketler her zaman büyük harflerle yazılır ve anlatılan şey programın gördüğü karakter kodunun değil, bir ANAHTAR SIRASI'dır. Evet bu bazen kafa karıştırıcı.
Caleb,

@Caleb: Teşekkürler! Anahtarın sermaye içinde olduğu nasıl belirtilir? Yoksa böyle bir dava var mı?
Tim

@Tim Bir terminalde, tuş kombinasyonları Ctrl+Shift+Dve Ctrl+Dyine aynı karakteri gönderir (genellikle 4 numaralı karakter Ctrl+D).
Gilles

2
@Tim Terminal , Ctrl + D aldı. Programa bir karakter göndermez. Program, terminalden okuduğunda, terminalin bir programın bir disk dosyasının sonundan sonra okumaya çalıştığı zamanki gibi “dosyanın sonu” olduğunu söylemesidir. Kabuk hiç dahil değil.
Gilles

23

İkinci noktanız birbirinden tamamen farklı iki şeyi toplar.

  • Ctrl + C çalışan işleme bir öldürme sinyali gönderir.
  • Ctrl + D bir İletim Sonu karakteri gönderir .

İkincisi için arıyorsunuz.


7
Burada karışıklık potansiyeli: Uygulama açısından, ^ D için hiçbir gerçek karakter gönderilmez. Bu, uygulamanın bu karakteri read(2)sistem çağrısından almadığı anlamına gelir .
ulidtko
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.