2014-04-16 15 views
8

Stdout'u ikili moda getirmenin bir yolu var mı? Herhangi bir işlem yapılmadan hangi modda stdout olursa, hata ayıklama konularından metin modunda olduğunu varsayıyorum, doğru mu? Stdout'u ikili moda getirmenin bir yolu var mı?

Ben işlevi çalıştı:

freopen(NULL,"wb",stdout)

ama bunu yaparken olduğumda benim program çöker olduğunu.

+1

Neden? stdout'un metin terminalleriyle uyumlu olması gerekiyor. Mevcut semuba göre metin semantiği alırsınız. (Not, C ve C++ farklı yerel ayar sistemlerine sahiptir ve kütüphane yerel ayarının işletim sistemi yerel ayarıyla eşleşmesi için olumlu adımlar atmanız gerekir.) – Potatoswatter

+0

'İkili mod' biçimli çıktıya gerek duymazsanız - biçimlendirilmemiş çıkışa yapıştırın –

+0

Hangi amaçla? Kötü bir fikir gibi geliyor ... – tenfour

cevap

10

çünkü: Bu platform ikili ve metin modu

#ifdef _WIN32 
    #include <io.h> 
    #include <fcntl.h> 
#endif 
... 
#ifdef _WIN32 
    setmode(fileno(stdout),O_BINARY); 
    setmode(fileno(stdin),O_BINARY); 
#endif 

Linux altında, bunu yapamaz aynı şeydir .

+0

Bu, çalışır. fwrite ("a \ nb", 1, 3, stdout) yaparak test edebilirsiniz; Ortaya çıkan dosya 3 bayt ise, stdout ikilidir. Yukarıdaki setmode() çağrıları olmadan, 4 baytlık bir dosyayla sonuçlanırsınız. –

0

Basit cevap, hayır. Mod, iostream nesnesi oluşturulduğunda belirlenir ve daha sonra değiştirilemez. Bazı uygulamalar daha sonra bunu yapmanın bir yolunu sağlayabilir, ancak bu standart değildir. Bazı uygulamalarda, stdout numaralı telefondan freopen, modu değiştirebilir, ancak bu resmi olarak düşünüyorum, bu C++ 'da yasaklanmıştır. (Bu, C.'de tanımlanan bir uygulamadır) Ve görünüşe göre, uygulamanızda işe yaramıyor.

Sisteminizin konsol aygıtını nasıl adlandıracağını (Unix; "CONS", Windows altında düşünüyorum) istediğiniz modda açıp çıktısını öğrenmek en iyi yoldur. Ben (Windows'da) ikili moduna Standart giriş ve çıkışı ayarlamak için aşağıda sunulan kod çalıştı

+1

Sadece 'CON' yerine CON '' yerine, ancak bu muhtemelen yardımcı olmaz - ikili çıktıya ihtiyaç duyduğunuz senaryolarda, söz konusu çıkışın konsola gitmesi olası değildir. Muhtemelen * bir konsolun bile olmayacak. (En tipik senaryo, ör., Bir web sunucusu için bir JPEG'yi dinamik olarak üreten bir CGI betiğidir.) –

İlgili konular