Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Запоздалое чтение с командной строки.

11K
20 июля 2006 года
Skol
27 / / 14.07.2006
Здравствуйте , может это вопрос не по теме , но все-таки ,
У меня такая проблемка : мне нужно пропинговать удаленный компьютер и понять , активен он или нет.
Я пишу :
error = system(PingString);
if (error!=0)
{
return -2;
}
scanf("%s",ResultString);
scanf("%s",ResultString);
scanf("%s",ResultString);
scanf("%s",ResultString);
flag = CheckPing(ResultString);
scanf("%s",ResultString);
Хочется считать четвертую строку из тех ,которые он вывел на экран , но вместо этого прога предлагает ввести новые строки.
Как сделать , чтобы строки , которые комп пишет сразу же после вызова pingа можно было считать?
Заранее спасибо.
7.8K
20 июля 2006 года
DrCoder
106 / / 27.01.2006
[QUOTE=Skol]
Как сделать , чтобы строки , которые комп пишет сразу же после вызова pingа можно было считать?
[/QUOTE]
-можно тупо перенаправить пинг в файл и читать из него текст
11K
20 июля 2006 года
Skol
27 / / 14.07.2006
А не подскажете как это сделать?
240
20 июля 2006 года
aks
2.5K / / 14.07.2006
Может это конечно не к месту, но всетаки немного не правильный подход.
Зачем исспользовать внешнюю программу если все можно реализовать программно. Например есть функции для работы с ICMP запросами используемыми в ping. IcmpSendEcho, IcmpSendEcho2.
Вот вам код:
Код:
char *SendData = "Data Buffer";
LPVOID ReplyBuffer;
   
ReplyBuffer = (VOID*) malloc(sizeof(ICMP_ECHO_REPLY) + sizeof(SendData));
if ((dwRetVal = IcmpSendEcho(hIcmpFile,
  inet_addr("123.456.789.0"),
  SendData, sizeof(SendData),
  NULL, ReplyBuffer,
  sizeof(ReplyBuffer) + sizeof(ICMP_ECHO_REPLY),
  1000)) != 0) {
  printf("\tReceived %ld messages.\n", dwRetVal);
  printf("\tMessage: %s\n", ReplyBuffer);
}
else {
  printf("\tCall to IcmpSendEcho() failed.\n");
  printf("\tError: %ld\n", GetLastError());
}

Описана в Icmpapi.h

Можно вобще через Raw sockets вручную написать ICMP взаимодействие с удаленным хостом. Если интересует могу привести код :))
11K
20 июля 2006 года
Skol
27 / / 14.07.2006
Спасибо большое! Завтра попробую!
11K
21 июля 2006 года
Skol
27 / / 14.07.2006
[QUOTE=aks]Может это конечно не к месту, но всетаки немного не правильный подход.
Зачем исспользовать внешнюю программу если все можно реализовать программно. Например есть функции для работы с ICMP запросами используемыми в ping. IcmpSendEcho, IcmpSendEcho2.
Вот вам код:
Код:
char *SendData = "Data Buffer";
LPVOID ReplyBuffer;
   
ReplyBuffer = (VOID*) malloc(sizeof(ICMP_ECHO_REPLY) + sizeof(SendData));
if ((dwRetVal = IcmpSendEcho(hIcmpFile,
  inet_addr("123.456.789.0"),
  SendData, sizeof(SendData),
  NULL, ReplyBuffer,
  sizeof(ReplyBuffer) + sizeof(ICMP_ECHO_REPLY),
  1000)) != 0) {
  printf("\tReceived %ld messages.\n", dwRetVal);
  printf("\tMessage: %s\n", ReplyBuffer);
}
else {
  printf("\tCall to IcmpSendEcho() failed.\n");
  printf("\tError: %ld\n", GetLastError());
}

Описана в Icmpapi.h

Можно вобще через Raw sockets вручную написать ICMP взаимодействие с удаленным хостом. Если интересует могу привести код :))[/QUOTE]
так это WinApi функция , а есть что-нибудь похожее под Linux?
240
21 июля 2006 года
aks
2.5K / / 14.07.2006
Так форум же называеться Microsoft Visual C++. Понятно, что виндовые функции здесь уместны :))

Если надо независимое от винды - то открывай сокет:
socket (AF_INET,SOCK_RAW,IPPROTO_ICMP);
и дальше пиши в него и читай по ICMP протоколу. Описание протокола есть в инете - оно не сложное.
Если не сможешь могу потом когд подсказать - сейчас занят немного.
2
21 июля 2006 года
squirL
5.6K / / 13.08.2003
вот классическая реализация ping через RAW_SOCKET'ы
http://www.ping127001.com/pingpage/ping.html
изучай :)
11K
21 июля 2006 года
Skol
27 / / 14.07.2006
Точно! Я и забыл что здесь про MVC++ речь=) пардон...
В итоге я просто сделал system("ping ..... > Ping.txt") и читал то , что нужно из файла.
Всем большое спасибо!
P.S. Про Raw_Socket'ы я все же почитаю=))
3
21 июля 2006 года
Green
4.8K / / 20.01.2000
А зачем тебе промежуточный файл?
Используй pipe.

Или можно читать stdin, запустив подрят два приложения: ping |myprog

А вообще-то для того, чтобы вырезать что-то из stdout не надо ничего писать своего, достаточно использовать grep и sed.
11K
21 июля 2006 года
Skol
27 / / 14.07.2006
[QUOTE=Green]
Или можно читать stdin, запустив подрят два приложения: ping |myprog

QUOTE]
А как это делать? Я где-то уже видел такое , но не понял , что имеется в виду...
240
21 июля 2006 года
aks
2.5K / / 14.07.2006
Это так весь stdout первой программы переводишь на stdin второй
11K
21 июля 2006 года
Skol
27 / / 14.07.2006
[QUOTE=aks]Это так весь stdout первой программы переводишь на stdin второй[/QUOTE]
Для вас это может и просто=)) А как это хоть примерно в коде выглядит?
240
21 июля 2006 года
aks
2.5K / / 14.07.2006
Это не в коде. Это из консоли так две программы запускаются. В коди конечно тоже можно запустить при желании - так же через system =))
11K
21 июля 2006 года
Skol
27 / / 14.07.2006
[QUOTE=aks]Это не в коде. Это из консоли так две программы запускаются. В коди конечно тоже можно запустить при желании - так же через system =))[/QUOTE]
Так мне то нужно в коде=) чтобы все автоматически работало и не надо было ничего самому делать.....
240
21 июля 2006 года
aks
2.5K / / 14.07.2006
Ну как в коде же уже сказали через сокеты =))
А это я просто расшифровал что значит ping |myprog :)
3
21 июля 2006 года
Green
4.8K / / 20.01.2000
[QUOTE=Skol]Так мне то нужно в коде=) чтобы все автоматически работало и не надо было ничего самому делать.....[/QUOTE]
Тогда используй pipe.
В форуме неоднократно обсуждались.
11K
21 июля 2006 года
Skol
27 / / 14.07.2006
[QUOTE=aks]Ну как в коде же уже сказали через сокеты =))
А это я просто расшифровал что значит ping |myprog :)[/QUOTE]
ААА , а я сразу не понял=)
В общем спасибо еще раз!:)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог