Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Что же такое stdin  (Прочитано 15181 раз)
0 Пользователей и 2 Гостей смотрят эту тему.
Boriska
Помогающий

us
Offline Offline

« : 17-04-2015 14:26 » 

Привет форумчане.++++-
О stdin, stdout много написано но особо ничего не понятно.
Некий поток к которому подключена то ли консоль то ли клава......
Встретил на просторах инета что данные отправленные методом POST
можно прочесть из stdin. Попробовал точно - работает. Следовательно
потоки это принадлежность ОСи и средство коммуникации между приложенями.
Так что же такое стандартные потоки если углубленно ?
Записан
LemmonRus
Помогающий

ru
Offline Offline
В правильно заданном вопросе 90% ответа.


« Ответ #1 : 17-04-2015 14:47 » 

Надо учесть еще что stdin работает так же и с файлами и разнообразными портами. RTFM
В общем это часть операционной системы (практически во всех операционных системах она в наличии) которая отвечает за прием данных из указанного источника.
Она по определению выше драйвера устройства.Но ниже пользовательского уровня.
Хорошая статья про это дело http://wasm.ru/wault/article/show/easycgi
« Последнее редактирование: 17-04-2015 14:51 от LemmonRus » Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #2 : 17-04-2015 18:04 » 

Традиционно у процесса есть три, уже открытых на момент запуска, файловых хендла: стандартный ввод, стандартный вывод и стандартный вывод для ошибок. Физически эти хендлы могут быть соединены с чем угодно, поддерживающим файловый IO: файлы, консоль, сокеты, межпроцессные потоки и т.д. Также эти хендлы могут быть закрыты или отсутствовать - в зависимости от ОС. Для винды стоит почитать в MSDN CreateProcess. Для POSIX-совместимых ОС это файлы с номерами 0, 1 и 2 соответственно.

В упомянутом CGI stdin подключен к сокету или межпроцессному потоку и используется для приема тела HTTP запроса в методах POST и PUT, а stdout аналогично - сокет или межпроцессный поток, и используется для вывода заголовка и тела HTTP.

Если говорим о стандартной библиотеке Си, то идентификаторы stdin, stdout и stderr - это указатели на структуры тира FILE, изначально ассоциированные с вышеупомянутыми хендлами, но их можно переназначить.

Если говорим о стандартной библиотеке C++, то там есть идентификаторы cin, cout и cerr - объекты типов istream и ostream.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Boriska
Помогающий

us
Offline Offline

« Ответ #3 : 18-04-2015 10:14 » new

Спсб. Для начала хватит, почитаю. 
Записан
Boriska
Помогающий

us
Offline Offline

« Ответ #4 : 29-04-2023 05:51 » 

Какова последовательность действий, правильно ли я понял ?
Я создаю три файла, получаю хендлы, запускаю два потока, передаю им хендды, потоки через них общаются, потоки закрываются, файлы остаются если потоки их не закрыли перед смертью. И опять же может ли поток закрыть файл если он ему передан ? И закрытие файлов - оба потока вправе закрыть файл, кто же закроет, а если не закроет ?
Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #5 : 29-04-2023 05:56 » 

Boriska, помедленей. Я лично не понял из потока мыслей сути вопроса. stdin, stdout, stderr.  Это стандартные хендлы файлов. Они создаются в ОС для стандартного обшения приложения с внешним миром. На уровне приложения их не нужно ни открывать, и не закрывать.
« Последнее редактирование: 29-04-2023 05:58 от Finch » Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Boriska
Помогающий

us
Offline Offline

« Ответ #6 : 29-04-2023 07:42 » 

хорошо, Finch писал
Цитата
Это стандартные хендлы файлов. Они создаются в ОС для стандартного обшения приложения с внешним миром. На уровне приложения их не нужно ни открывать, и не закрывать.
получается это три объекта на ось, если для этой оси такое существует ?
RXL писал
Цитата
Для винды стоит почитать в MSDN CreateProcess.
почитал, каждому процессу передается структура
Код: (C++)
typedef struct _STARTUPINFOA {
  DWORD  cb;
  LPSTR  lpReserved;
  LPSTR  lpDesktop;
  LPSTR  lpTitle;
  DWORD  dwX;
  DWORD  dwY;
  DWORD  dwXSize;
  DWORD  dwYSize;
  DWORD  dwXCountChars;
  DWORD  dwYCountChars;
  DWORD  dwFillAttribute;
  DWORD  dwFlags;
  WORD   wShowWindow;
  WORD   cbReserved2;
  LPBYTE lpReserved2;
  HANDLE hStdInput;
  HANDLE hStdOutput;
  HANDLE hStdError;
} STARTUPINFOA, *LPSTARTUPINFOA;
передаются хэндлы стандартных потоков. Я не понял, если всем создаваемым процессам передаются хэндлы одних и тех же потоков, как собственно процессы разберутся кому что предназначено. Скажем сервер выполняет два CGI скрипта и каждый из них читает или пишет в поток
И просьба слейте темы про std потоки в одну тему (я начинал в Форум программистов «Весельчак У» > Программирование > Общий (Модератор: Вад))
Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #7 : 29-04-2023 09:31 » 

Консоль одна. И естественно все потоки ввода.вывода будут контактировать с нею. В CGI демон http будет разносить по процессам. Вывод не идет на консоль.
Когда Ось или приложение открывает процесс. Она передает ему свои переменные окружения и потоки ввода вывода. Приложение родитель может переопределить потоки ввода-вывода на себя. И тогда вывод не будет на консоль.
Такая практика появилась еше когда заместо мониторов и клавиатур стояли телетайпы.
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines