Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> стандартное устройство вывода, stdout 
:(
    Опции темы
TeeT
Дата 22.12.2005, 17:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 9.12.2005
Где: Нальчик

Репутация: нет
Всего: нет



Можно ли менять стандартное устройство вывода, но не явно? (вывод в файл без функций работы с файлом). В смысле экран - stdout определен как FILE, а пишем мы на него printf-ом, иоли я чего то недопонимаю smile

PM MAIL   Вверх
TeeT
Дата 22.12.2005, 18:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 9.12.2005
Где: Нальчик

Репутация: нет
Всего: нет



Из stdio.h определение устройств
Код

extern  FILE        _RTLENTRY _EXPDATA _streams[];
extern  unsigned    _RTLENTRY _EXPDATA _nfile;

#define stdin   (&_streams[0])
#define stdout  (&_streams[1])
#define stderr  (&_streams[2])

а вот определение функции
Код

#define putchar(__c)  putc((__c), stdout)

PM MAIL   Вверх
nworm
Дата 22.12.2005, 20:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 502
Регистрация: 22.10.2005

Репутация: 1
Всего: 8



В консоли linux-а можно так приложения выполнять:

prog > outfile

вместо

prog

и printf пишет в файл outfile, после выполнения можно просматривать результаты (может это и не то, что здесь требуется smile ).
PM MAIL WWW   Вверх
TeeT
Дата 23.12.2005, 09:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 9.12.2005
Где: Нальчик

Репутация: нет
Всего: нет



Цитата

В консоли linux-а можно так приложения выполнять:
prog > outfil

в винде так тоже можно. Слышал о конкурсе IOCCC, проводится каждый год, ну так вот у меня прога есть с конкурса она создает три файла притом там нет ни одного fopen-a, fclose-a ну и так далее... а исходник совсем непонятный smile
PM MAIL   Вверх
azesmcar
Дата 23.12.2005, 09:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 81
Всего: 211



TeeT

При запуске программы она автоматически создает три файловых дескриптора..
stdin, stdout и stderr

когда ты делаешь fopen создается очередной дескриптор...и их все можно спокойно менять местами в линуксе функции dup() и dup2.
Причем тоже самое (в линуксе, в виндоузе не знаю, не пробовал) можно сделать с любым дескриптором...например сокет. Можешь перенаправить весь stdin в socket...и все что получае программа через stdin будет отправляться по сети тому с кем присойденен твой сокет...
PM   Вверх
TeeT
Дата 23.12.2005, 10:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 9.12.2005
Где: Нальчик

Репутация: нет
Всего: нет



azesmcar

Спасибо, интересно почему так не работает
Код

#include <stdio.h>
#include <io.h>

int main(int argc, char* argv, char *env[])
{
 int i;
 FILE *out;
 out = fopen("out.txt", "w");

 *(_streams + 1) = *out;
// dup2( out->fd, _streams[1].fd);

 printf("flags  bsize  fd");
 for(i=0;_streams[i].flags;i++)
  printf("\n%5d %5d %5d", _streams[i].flags, _streams[i].bsize, _streams[i].fd);

 fcloseall();
 return 0;
}

интересно как именно работает dup2, гда можно достать исходник?
PM MAIL   Вверх
Romikgy
Дата 23.12.2005, 10:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 8
Всего: 146



SetStdHandle юзай


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
azesmcar
Дата 23.12.2005, 11:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 81
Всего: 211



Цитата
      #include <unistd.h>

      int dup(int oldfd);
      int dup2(int oldfd, int newfd);

DESCRIPTION
      dup and dup2 create a copy of the file descriptor oldfd.

      After successful return of dup or dup2, the old and new descriptors may
      be used interchangeably. They share locks, file position  pointers  and
      flags;  for example, if the file position is modified by using lseek on
      one of the descriptors, the position is also changed for the other.

      The two descriptors do not share the close-on-exec flag, however.

      dup uses the lowest-numbered unused descriptor for the new  descriptor.

      dup2  makes  newfd  be the copy of oldfd, closing newfd first if neces-
      sary.

RETURN VALUE
      dup and dup2 return the new descriptor, or -1 if an error occurred  (in
      which case, errno is set appropriately).



Код

#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>

int main(int argc, char* argv, char *env[])
{
 int i = open("out.txt", O_RDWR|O_CREAT );

 dup2( i, 1 );

 printf("Hello world!!!\n");

 close(i);

 return 0;
}


Это код под юникс, под виндоуз не могу, у меня его нет smile т.е. виндоуз есть, компилятора нет!
PM   Вверх
TeeT
Дата 23.12.2005, 15:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 9.12.2005
Где: Нальчик

Репутация: нет
Всего: нет



azesmcar
Пасибо
Если хочешь вот есть компилер хороший:
http://www.bloodshed.net/dev/devcpp.html
ну или сразу Dev-C++ 5.0 beta 9.2 (4.9.9.2) (9.0 MB) with Mingw/GCC:
http://prdownloads.sourceforge.net/dev-cpp...9.9.2_setup.exe

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0734 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.