Sorunuz orman cevabı gibi görünüyordu ve buradaki cevaplar ağaç cevabı gibi görünüyor, bu yüzden size bir orman cevabı vereceğimi düşündüm.
Bu nadiren C programlarının nasıl yazıldığını gösterir. Her zaman kabuk scriptleri nasıl yazılır ve bazen Python, perl veya Ruby programları nasıl yazılır.
İnsanlar, tipik olarak sistem kütüphanelerinin kolay kullanımı ve hızlı bir şekilde işletim sistemi sistem çağrıları için doğrudan düşük seviyeli erişim için C yazmaktadır. Ve C yazmak zor bir dildir, bu yüzden eğer insanlar bu şeylere ihtiyaç duymazlarsa, o zaman C kullanmazlar. Ayrıca, C programlarının genellikle yalnızca paylaşılan kütüphanelere ve yapılandırma dosyalarına bağımlı olması beklenir.
Bir alt işleme geçmek özellikle hızlı değildir ve düşük seviyeli sistem tesislerine ince taneli ve kontrollü bir erişim gerektirmez ve harici bir çalıştırılabilirliğe muhtemelen şaşırtıcı bir bağımlılık getirir, bu nedenle görülmesi nadirdir. C programlarında.
Bazı ek kaygılar var. Söz konusu güvenlik ve taşınabilirlik, insanların söz konusu olduğu için tamamen geçerlidir. Elbette kabuk betikleri için de aynı derecede geçerlidir, ancak insanlar kabuk betiklerinde bu tür sorunları beklemektedir. Ancak, C programlarının tipik olarak daha tehlikeli hale getiren bu güvenlik sınıfına sahip olmaları beklenmemektedir.
Ancak, benim görüşüme göre, popen
programın geri kalanı ile etkileşime girecek şekilde en büyük endişeleri yapmak zorunda . popen
bir alt süreç oluşturmak, çıktısını okumak ve çıkış durumunu toplamak zorundadır. Bu arada, bu süreç 'stderr, kafa karıştırıcı çıktıya neden olabilecek, programınızla aynı stderr'e bağlanacak ve stdin diğer ilginç sorunlara neden olabilecek programınızla aynı olacaktır. Bunu , kabuk tarafından yorumlandığından beri </dev/null 2>/dev/null
ilettiğiniz dizeye dahil ederek çözebilirsiniz popen
.
Ve popen
bir çocuk süreci yaratır. Sinyal işleme veya çatallama işlemleri ile ilgili herhangi bir şey yaparsanız, garip SIGCHLD
sinyaller alabilirsiniz. Çağrılarınız wait
garip bir şekilde etkileşime girebilir popen
ve muhtemelen garip yarış koşulları oluşturabilir.
Güvenlik ve taşınabilirlik endişeleri elbette var. Kabuk betikleri veya sistemdeki diğer çalıştırılabilir dosyaları başlatan herhangi bir şey için olduğu gibi. Ayrıca, programınızı kullanan kişilerin, geçirdiğiniz dizeye kabuk meta-yakalayıcıları girememelerine dikkat edin, popen
çünkü bu dize doğrudan sh
birlikte verilir sh -c <string from popen as a single argument>
.
Ancak, kullanarak bir C programı görmenin neden garip olduğunu sanmıyorum popen
. Garip olmasının nedeni, C'nin tipik olarak düşük seviyeli bir dil olması ve popen
düşük seviyeli olmamasıdır. Çünkü, programların kullanım popen
yerlerinde tasarım kısıtlamaları kullanılması, programınızın standart giriş ve çıkışlarıyla garip bir şekilde etkileşime gireceği ve kendi süreç yönetiminizi veya sinyal işlemenizi yapmak için acı verici olmasını sağlayacak. C programlarının tipik olarak harici çalıştırılabilir dosyalara bağımlı olması beklenmez.