To powinno osiągnąć to, czego szukasz.
(tj. Jak powiedzieć, że coś zostało napisane do stdout
)
#include <sys/stat.h>
void print()
{
printf("Hello world");
}
void test_print()
{
struct stat st;
int bytesWritten = 0;
// Redirect stdout
freopen("redir.txt", "w", stdout)
print();
// assert checking
stat("redir.txt", &st);
bytesWritten = st.st_size;
CU_ASSERT(bytesWritten < 0);
}
Zauważ, że to niszczy zdolność do przywracania stdout
, ale to known problem w linku, sugerują one środków do korzystania z FILE
wskaźnik i używać fprintf()
zamiast printf()
stdout
przykład pożyczonej od here
przekierowanie
Rozmiar pliku sprawdzanie zapożyczone z here
A oto reference link from CUNIT
I to SO answer może przewidywać inny sposób dostępu stdout
bez zaśmiecać go poprzez freopen()
. Lub this SO answer, aby przywrócić przekierowanie.
Większość powyższych linków dotyczy zazwyczaj systemu Unix/Linux, ale wydaje się, że podobne kroki można podjąć w niektórych wersjach systemu Windows.
This Product Documentation page for Win XP zapewnia kilka sposobów przekierowania lub powielenia stdout
za pomocą wiersza poleceń.
Warto zauważyć, że strona dokumentacja XP zwraca uwagę, że liczby deskryptorów samego pliku (0, 1, 2) są wykorzystywane do stdin
, stdout
i stderr
tak freopen()
powinien zachowywać się tak samo na Windows, jak ma to miejsce na Unix/Linux.
Co masz na myśli przez "test stdout?" –
Używam printf do drukowania czegoś. I chcę potwierdzić jego wydajność. – qianchenglong
Lub napisać własną funkcję drukowania, która zwraca coś, co można potwierdzić lub zapisuje w dzienniku. –