Autor Wątek: Przekierowanie stdin  (Przeczytany 903 razy)

Offline ropuch

  • Użytkownik

# Październik 05, 2010, 15:37:56
Mam problem z przekierowaniem stdin w przypadku kiedy używam AttachConsole(ATTACH_PARENT_PROCESS).
Konsola do której próbuję się podpiąć to ta standardowa po uruchomieniu cmd.
Kiedy tworze swoją konsole poprzez AllocConsole() wszystko działa jak powinno.

Kod wygląda mniej więcej tak:
AttachConsole(ATTACH_PARENT_PROCESS);
intptr_t inStdHandle = (intptr_t)(GetStdHandle(STD_INPUT_HANDLE));
int inHandle = _open_osfhandle(inStdHandle, _O_TEXT); // tu jest problem. probowalem rowniez _O_TEXT | _O_RDONLY oraz _get_osfhandle
FILE* inFile = _fdopen(inHandle, "r");
setvbuf(inFile, NULL, _IONBF, 0);
*stdin = *inFile;
W tym kodzie pominąłem sprawdzanie błędów.
AttachConsole wykonuje się poprawnie, GetStdHandle też (chyba) bo zwraca 3, natomiast _open_osfhandle wywala się z -1.
W dokumentacji nie piszą co może powodować nieudaną próbę otwarcia uchwytu do pliku systemowego.
Jak mogę naprawić albo obejść ten problem?

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline bies

  • Użytkownik

# Październik 05, 2010, 16:08:56
Sprawdź errno (dokumentację do perror). CRT w przypadku błędów używa errno do zgłaszania.

Offline fredman7

  • Użytkownik

# Październik 05, 2010, 17:58:03

Offline ropuch

  • Użytkownik

# Październik 07, 2010, 17:47:22
Dziwne, dzisiaj miałem zająć się tym problemem, ale już się nie powtórzył.
W każdym razie dzięki za informacje o sprawdzaniu errno :)