Наверняка. Вот два предложения:
Удачи!
Для создавания интерактивного приложения, можно открыться /dev/tty
, это возвратит дескриптор файла терминалу управления:
int ttyfd = open("/dev/tty", O_RDWR);
Можно использовать его вместо STDIN_FILENO
или STDOUT_FILENO
(они могли быть перенаправлены к чему-то другому, чем терминал, когда программа запущена).
Вот некоторый пример:
#include <stdlib.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int main() {
int ttyfd = open("/dev/tty", O_RDWR);
printf("fd: %d\n", ttyfd);
write(ttyfd, "hello tty!\n", 11);
return 0;
}
При вызове с ./test >out
, это должно распечатать приветственное сообщение на терминале и чем-то как fd: 3
в out
файл.
open
вызов должен возвратить первое не выделенное fd число (обычно 3, если Вы не делаете некоторые странные перенаправления). Это работает на Вас? – Stéphane Gimenez 25.11.2011, 02:27open
потому что Вы упомянули STDOUT_FILENO, но если Вы хотите ФАЙЛ* (как stdout) затем, необходимо использоватьfopen
. – Stéphane Gimenez 25.11.2011, 02:29/dev/tty
и для входа и для входа, и не заботятся о том, на каком дескрипторе файла он открыт. – Gilles 'SO- stop being evil' 25.11.2011, 04:04