2009-10-17 3 views

ответ

3

Linux/OSX (на самом деле POSIX), программирование (на любом языке, которые имеют POSIX вызовы), общая схема:

  1. установка гнездо ...
  2. fork()
  3. close(0), close(1) (не обязательно , dup2 закрывает его тоже ... но добавил для ясности)
  4. dup2(socket, 0), dup2(socket, 1)
  5. exec()

Shell: используйте nc. Пример в моей другой ответ: https://stackoverflow.com/questions/1269400/is-this-a-fair-question-to-ask-in-a-software-engineering-interview-phase-1/1269577#1269577

+0

Если я использую: NC -e «программа арг» она не работает. Все вокруг? –

+1

Используйте 'nc -c"/full/path/to/program args "'. – liori

+0

fork() не требуется. –

0

В операционной системе UNIX от оболочки: http://www.askdavetaylor.com/how_do_i_reredirect_stdin_in_a_unix_or_linux_shell_script.html

Для получения более общей информации: http://www.mathinfo.u-picardie.fr/asch/f/MeCS/courseware/users/help/general/unix/redirection.html

Для окон, с сокетом: http://www.unix.com/high-level-programming/79439-redirect-stdin-out-sockets.html

Вот объяснение на UNIX, для перенаправления: http://www.rtems.com/ml/rtems-users/2007/october/msg00063.html

Теперь этот будет перенаправлять только что-либо, идущее в stdin/out/err, которое поступает из программы.

Мне нравится тот факт, что последнее звено также восстанавливает STDIN/из/ERR перед выходом из программы. Если вы внесете какие-либо изменения, как это, восстановление - это хорошая вещь, которую следует помнить.

Существует несколько способов сделать это, вы можете использовать трубы, и, например, труба идет в сокет или файл, поэтому stdin/out будет перенаправлен на канал. Это хорошо, если вы хотите переключиться туда, куда идет конечный пункт назначения, или если вы хотите сделать некоторую обработку на этом пути, так как каждый канал может выполнить некоторую обработку.

3

Я также задаюсь вопросом, является ли xinetd не полезно в этой ситуации. Это позволяет вам писать программу, которая просто читает с stdin и записывает в stdout, а затем xinetd обрабатывает прослушивание на каком-либо сокете, отделяя необходимые сокеты i/o и привязывая их к вашему процессу.

Смежные вопросы