C programım içinde STDOUT'u geçici olarak "/ dev/null" olarak yönlendirmek istiyorum (örneğin). Sonra "/ dev/null" yazdıktan sonra STDOUT geri yüklemek istiyorum. Bunu nasıl yönetirim? aşağıdaki gibiBir C programında stdout'u bir dosyaya nasıl geçici olarak yönlendirebilirim?
POSIX sistemlerinde
23
A
cevap
47
, bunu yapabilirsiniz: İstediğin başka genelliği mümkün değildir
int bak, new;
fflush(stdout);
bak = dup(1);
new = open("/dev/null", O_WRONLY);
dup2(new, 1);
close(new);
/* your code here ... */
fflush(stdout);
dup2(bak, 1);
close(bak);
. stdout
numaralı belgeyi geri yüklemenize izin vermediğinden, freopen
kullanarak herhangi bir çözüm yanlıştır. stdout
, stdout
değeri bir değer değil (FILE *
türünde bir ifadeye genişleyen bir makro) olarak atama yoluyla stdout
için bir çözüm yanlıştır.
İlgili konular
- 1. QProcess'in çıktısını bir dosyaya nasıl yönlendirebilirim?
- 2. Stdout'u tcl içinde bir dosyaya nasıl yeniden yönlendirebilirim?
- 3. Ostream nesnesini geçici bir arabelleğe nasıl yönlendirilir?
- 4. C programında% c nasıl yazdırılır?
- 5. Bir görüntü dosyasını HTTP aracılığıyla bir geçici dosyaya nasıl indirebilirim?
- 6. Bir C++ programında bir XML dosyası okuma
- 7. Bir iç sınıf bildirmeyi nasıl yönlendirebilirim?
- 8. Bir Facebook kullanıcısını uygulamamdan nasıl yönlendirebilirim?
- 9. Bir şeyi nasıl yazdırabilirim (geçici olarak)?
- 10. C# programında bir .lib dosyasını kullanma
- 11. Git'i bir dosyaya ikili olarak nasıl davranabilirim?
- 12. C++ içinde bir dosyaya yazma
- 13. Linux programında C++
- 14. C# programında ThePreStub nedir?
- 15. C Programında #define Kullanımı
- 16. Bir klasörle eşleşen dosya isteğini başka bir bağlantıya nasıl yönlendirebilirim?
- 17. Bir dosyayı "<" kullanarak bir alt işlemde nasıl yeniden yönlendirebilirim?
- 18. Birden çok iş parçacığının eşzamansız olarak bir dosyaya yazmak C#
- 19. C programında% s belirtiminden önce c
- 20. Laravel'de eski girdiyle nasıl yönlendirebilirim?
- 21. Bir Systemd Hizmet Olarak Çalışırken Bir Dosyaya Çıkış Nasıl Borulanır?
- 22. Android: Bir dosyaya manuel olarak bir dosya nasıl eklenir?
- 23. Geçici bir dosyayı kaydetme
- 24. C/C++ Programında Önbellek Vuruşu/Bayan Program
- 25. bir dosyaya
- 26. C++ programında hata satırı numarası nasıl alınır
- 27. C programında Linux komutunu çalıştırın
- 28. Bir Java programında varolan bir dosyayı nasıl yeniden yazarım?
- 29. #include <stdio.h> gerçekten bir c programında ne yapıyor
- 30. FileBytes bir dosyaya nasıl dönüştürülür?
Dup2'yi kullanmayın. Yakın (yeni) ve sonra dup (1) kullanın; dup() doğru tanıtıcıyı elde etmenizi sağlar. 'Newfd açıksa, close() zamanında bildirilen hatalar kaybolur. Dikkatli bir programcı ilk önce newfd'yi kapatmadan dup2 kullanmaz. –
@MoraruLilian: Çok kasıtlı olarak dup2'yi kullandım. Yorumunuz benim kodumla karıştırılan tüm argümanlara sahip, bu yüzden ne demek istediğinizden emin olamıyorum, ancak dup2' içermeyen herhangi bir çözüm ** tehlikeli yarış koşullarına sahiptir **. Dup2 (x, y) 'nin anlamı, 'x' nin bir kopyası ile atomik olarak ** yi değiştirmektir. –