Запись в stdout за исключением перенаправления вывода C

Наверняка. Вот два предложения:

  1. Негласно CLI. Используйте V4L2VD для создания виртуального видеоустройства, такого как/dev/videoVirt1 и канал через mplayer для эффектов. Даже некоторые подобные примеры в примечаниях.
  2. Используйте толстую настольную программу, такую как webcamstudio, чтобы создать каналы и сделать Ваши чудеса скайпа/широковещательной передачи - все еще с mplayer для эффекта ASCII

Удачи!

5
25.11.2011, 08:39
1 ответ

Для создавания интерактивного приложения, можно открыться /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 файл.

7
27.01.2020, 20:38
  • 1
    В настоящее время, открытый возвращенный 0, таким образом, стандартный вывод. Это означает, писание там (тот же fd как станд.* или не) запишет на консоли, но НЕ в стандартном выводе? –  Max13 25.11.2011, 01:54
  • 2
    @Max13: Я добавил некоторый пример, open вызов должен возвратить первое не выделенное fd число (обычно 3, если Вы не делаете некоторые странные перенаправления). Это работает на Вас? –  Stéphane Gimenez 25.11.2011, 02:27
  • 3
    Также обратите внимание, что я использовал open потому что Вы упомянули STDOUT_FILENO, но если Вы хотите ФАЙЛ* (как stdout) затем, необходимо использовать fopen. –  Stéphane Gimenez 25.11.2011, 02:29
  • 4
    @Max13 В приложении, которое имеет терминал UI, Вы использовали бы /dev/tty и для входа и для входа, и не заботятся о том, на каком дескрипторе файла он открыт. –  Gilles 'SO- stop being evil' 25.11.2011, 04:04
  • 5
    @StéphaneGimenez: Спасибо, это решает мою проблему. –  Max13 25.11.2011, 13:03

Теги

Похожие вопросы