2012-08-17 4 views
5

Mam funkcję, która musi być w stanie zapisać do stdout lub do pliku, w zależności od tego, co użytkownik chce. Domyślnie jest to standardowe wyjście. Aby to osiągnąć, robię następujący (minus sprawdzanie błędów itp):Czy ustawienie PLIKU * jest równe przenośnemu stdout?

FILE* out; 
if (writeToFile) { /*Code to open file*/; } 

else 
    out = stdout; 

// ...rest of the function goes here 

if (out != stdout) 
    fclose(out); 

To na pewno załatwia sprawę, ale nie mam pojęcia, jak to jest przenośny. A jeśli tak nie jest i/lub jest inny problem z tym, jak mam to zrobić?

Odpowiedz

8

Tak, jest przenośny i wszystko jest w porządku, pod warunkiem, że nie zadzierasz również z niskopoziomową implementacją *stdout (na przykład wywołując close(fileno(stdout)) na Posix lub używając dup).

1

Powinno być dobrze. Możesz mieć problemy, jeśli przesuniesz wskaźnik w przód i w tył przez granicę biblioteki DLL (tj. Kod C poza biblioteką DLL przekazuje wskaźnik do standardowego kodu C w bibliotece DLL), ale poza tym powinien być przenośny.