Ben Common Lisp programı (Gnuplot) bir işlem üretmekten ediyorum. Süreç için girdi ve çıktı akışları oluşturabiliyorum. Ancak, çıktıdan okumada bir sorunum var. Sorun şu ki, çıktıdan okumayı denemek istiyorum ve eğer orada hiçbir şey yoksa, ... örneğin hiçbir şey yapmamak.Giriş akışının boş olup olmadığı nasıl algılanır (EOF değil)?
(Temel sorun: Ben komuta show term
sonucunu okumak istiyorum ama bu komutu göndermeden önce gnuplot üretilmiş olabilecekleri diğer çıkışını atlamak istiyorum)
Sadece (read-line gnuplot-output nil :eof)
kullanıyorsanız ve hiçbir şey de yoktur çıkış akımı, bu :eof
(akışı hala hayatta ve bir şey görünebilir beri) ve (sonsuza yani) okumak için bir şey vardır dek sadece engeller göstermeyecektir.
Okunacak bir şey olmadığını tespit etmenin bir yolu var mı? En azından, bir şekilde okuma girişimi güvenli bir şekilde zaman aşımına uğradı (yani zaman aşımına ulaşıldıktan sonra akıştan yeni bir çizgi çıkarmamalıdır)?
PS. Kullanılabilir bir karakter olup olmadığını SBCL
1+: ayrıca bkz 'read-char-no-hang' – coredump
'read-char-no-hang' ile' dinlemek' kullanmanız gerekmez. Ayrıca, bir dış değişken bağlamaları çöken 'let' /' * 'iç' do'/'Eğer düzenlemelerinizden bir kod okunabilirliği ve sürdürülebilirliği engelleyen olduğu gibi *', sadece kaydetmek do birkaç karaktere izin verin. Hem 'program' hem de 'çıktı-akışı' döngüde değişmez, bu yüzden onları bir dışta bırakalım. – acelent
@acalent "Dinle", okumadan okunacak bir şey olup olmadığını kontrol etmektir. Sadece 'read-char-no-hang' kullanılması girişin ilk karakterini kullanır ve mantığı daha karmaşık hale getirir. Değişken bağları ayrı bir 'let'de olduğu gibi, ilk başta daha net olacağını düşünmüştüm ama sonra programdan çıkana kadar döngü çalışması gerektiğinden, programın döngüler içinde başlamasının mantıklı olduğunu düşündüm. başlatma. Bu şekilde çocuk sürecinin tüm ömrü tek bir yerde. – jkiiski