Windows platformu için buna eşdeğer lazım, herhangi bir işaretçi lütfen? Bu benim * Nix platformları için takip ne olduğunu ve (eğer error_stream
diyebiliriz?) Bir değişken ilan etmeyi düşünebilir, daha genişletilebilir alternatif olarak heregeçici yönlendirme stderr.
-1
A
cevap
1
bulabilmesi far.The linki çalışıyor görünüyor hangi stderr
olarak ayarlamış olduğunuz süreler ve diğer zamanlarda başka bir dosyaya (örneğin, Windows NT'de fopen(NUL_DEVICE_FILENAME, "wb");
) ayarladınız.
Bu kodun güzel bir yönü, her OS için NUL_DEVICE_FILENAME
(hatta tüm işlevlerin) değiştirilebilmesidir; işlevler, bağlantı noktasına daha az taşınabilir davranışı kolaylaştırmak için bir arabirim haline gelir. Örnek olarak kullanım için test.c'ye (bu yazının en altına yakın) bakın ve bunun çıktısı çalışmanın kanıtıdır. Bu pasajı iyi şanslar ... :)
error_stream.h:
#ifndef INCLUDE_ERROR_STREAM
#define INCLUDE_ERROR_STREAM
#include <stdio.h>
FILE *get_error_stream(void);
void set_error_stream(FILE *);
void reset_error_stream(void);
void blank_error_stream(void);
#endif
error_stream.c:
#include "error_stream.h"
#define NUL_DEVICE_FILENAME "NUL" /* This worked fine for me on Win10 */
/* Try "\\Device\\Null", "NUL" and *
* ... "NUL:" if it doesn't work, *
* ... or obviously "/dev/null" on *
* ... *nix */
FILE *error_stream, *blank_stream;
FILE *get_error_stream(void) {
if (!error_stream) {
error_stream = stderr;
}
return error_stream;
}
void set_error_stream(FILE *f) {
error_stream = f;
}
void reset_error_stream(void) {
set_error_stream(stderr);
}
void blank_error_stream(void) {
if (!blank_stream) {
blank_stream = fopen(NUL_DEVICE_FILENAME, "wb+");
}
set_error_stream(blank_stream);
}
test.c:
#include "error_stream.h"
int main(void) {
fputs("Testing\n", get_error_stream());
blank_error_stream();
fputs("Testing\n", get_error_stream());
reset_error_stream();
fputs("One\n", get_error_stream());
blank_error_stream();
fputs("Two\n", get_error_stream());
reset_error_stream();
}
C:\Users\Seb\Desktop>gcc -c error_stream.c -o error_stream.o
C:\Users\Seb\Desktop>gcc test.c error_stream.o -o test.exe
C:\Users\Seb\Desktop>test
Testing
One
İlgili konular
- 1. Bakım sayfasına geçici yönlendirme
- 2. Neden android üzerinde stdout/stderr yönlendirme çalışmıyor?
- 3. başarısızlık: retrofit.RetrofitError: 307 Geçici Yönlendirme?
- 4. PHP StdErr sonra Exec()
- 5. Pexpect'ten stderr ayıklanıyor
- 6. Geçici
- 7. Stkut/stderr/stdin akışlarını, FFI
- 8. Bash'ta stderr yönlendirmelerine metin ekle
- 9. NDK ile stdout/stderr yakalama
- 10. Haskell: System.Process birleştirme stdout ve stderr
- 11. aynı dosyaya stdout ve stderr yeniden yönlendir ve ona iki dosyalara benim c programının stderr'e çıktısını ve çıkışı yönlendirme ve daha sonra özgün stdout ve stderr yeniden ediyorum
- 12. ASP MVC Yönlendirme (yönlendirme)
- 13. Yönlendirme hizmet/fabrikasına yönlendirme
- 14. Java'da devralınan stdin/stdout/stderr ile bir işlem başlatma 6
- 15. Powershell'deki stderr çıktısı nasıl bastırılır? PS komut dosyasında
- 16. Node.js middleware yönlendirme çalışmıyor
- 17. Windows'ta stdout/stderr metin rengini ayarlama
- 18. Python setinde stdout veya stderr çıktısı setUpClass
- 19. Neden wget çıktı stdout yerine stderr?
- 20. Mesajları stderr veya stdout'a kaydetmeli miyim?
- 21. Python Flask erişim günlüğüne STDERR yazıyor
- 22. Stdout'u stderr kullanmadan bir dosyaya yönlendirdikten sonra terminale yazılır mı?
- 23. Python Popen, Windows'ta çoklu iş parçacıklı - stdout/stderr günlüklerini silemiyor
- 24. ASP.NET'teki farklı yönlendirme parametreleriyle aynı sayfaya yönlendirme
- 25. Bash belirsiz yönlendirme - birden çok dosyaya yönlendirme
- 26. Küçük, geçici şubesi Mercurial
- 27. __proto__ geçici çözüm 10
- 28. SQL Server'a geçici uzantılar
- 29. test-bağlantısı? geçici çözüm?
- 30. Geçici tablolar nerede bulunur?
Windows için benzer olmalıdır, ancak #include 'zorunda' ve yerine dup2' vb –
Ah, 'arasında _dup2'' yerine dup' 'arasında _dup'' kullanmalı ve '/ dev/null' 'yerine' 'nul'' açmanız gerekir. –