Вопрос по С++

Cris

Member
данный материал я читал даже более того использовал в написании проги, но всеже не смог по нему разобратсо с параметрами командной строки...
я разоюбрался, и переделал
вот код моей проги для получения параметров:
Код:
#include "iostream"
int main(int argc, char* argv[])
{
	int count=1;
	while(argc>count)
	{
		std::cout<<"Parametr #"<<count<<" - "<<argv[count]<<"\n";
		count++;
	}
	return 0;
}
как я понял параметром считаеться набор символов отделенныйх пробелами) когда проверял свою прогу)
 

xxxFAFNIRxxx

Вечный студент :)
Язык: Си
Задача: написать программу, которая анализирует лог-файл прокси-сервера squid и выводит на екран необходимую статистику. Имя лог-файла и остальные данные передаются как параметры командной строки.

Логи сквида выглядят вот таким образом:
Код:
40 192.168.0.25 TCP_MISS/404 670 GET http://traffic.maps.yandex.net/tiles/2000? DEFAULT_PARENT/127.0.0.1 text/html
293 192.168.0.16 TCP_MISS/404 343 GET http://cb.icq.com/cb/icqsrp/10/srp.cb? DEFAULT_PARENT/127.0.0.1 text/html
18 192.168.0.16 TCP_MISS/301 272 GET http://www.punto.ru/ DEFAULT_PARENT/127.0.0.1 text/html
298 192.168.0.16 TCP_MISS/404 343 GET http://cb.icq.com/cb/icqsrp/10/srp.cb? DEFAULT_PARENT/127.0.0.1 text/html
51 192.168.0.16 TCP_REFRESH_MISS/200 7403 GET http://punto.yandex.ru/ DEFAULT_PARENT/127.0.0.1 text/html
Программа выглядит вот так:
Код:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define k 4
typedef char str120[120];
struct sqlgip{
   int a;
   int b;
   int c;
   int d;
};
struct sqlg {
   int elapsed;
   sqlgip ip;
   char status_http[100];
   int size;
   char method[10];
   char url[100];
   char hierstatus_hierhost[100];
   char type[25];
};
FILE *f;
int i,j,w;
str120 s[k];
sqlg mas[100];
sqlgip gg[100];
char u[100];
void main (int col, char *fname[40]){
w=0;
f=fopen(fname[1],"r");
if(f == NULL){
    puts("the end");
    return ;
}
for(i=0;i<k;i++){
   if(NULL==fgets(s[i],sizeof(s),f)){
	printf("Ne udalos schitat stroku");
   }
}
int a, b, c, d;
for(i=0;i<k;i++){
  sscanf(s[i],"%d%d.%d.%d.%d%s%d%s%s%s%s",&mas[i].elapsed,&a,&b,&c,&d,mas[i].status_http,&mas[i].size,mas[i].method,mas[i].url,mas[i].hierstatus_hierhost,mas[i].type);
  mas[i].ip.a = a;
  mas[i].ip.b = b;
  mas[i].ip.c = c;
  mas[i].ip.d = d;
}
int p;
for (w = 0; w < k; w++){
   for(i=0; mas[w].url[i] != '/'; i++);
   i++;
   p = 0;
   for(j=i+1;(mas[w].url[j] != '/') && ( mas[w].url[j] !='\0');j++){
  	u[p++]= mas[w].url[j];
   }
   strcpy(mas[w].url,u);
}
sscanf(fname[2],"%d.%d.%d.%d",&gg[0].a,&gg[0].b,&gg[0].c,&gg[0].d);
for(i=0;i<k;i++){
	if(((gg[0].a==mas[i].ip.a)&&(gg[0].b==mas[i].ip.b)&&(gg[0].c==mas[i].ip.c)&&(gg[0].d==mas[i].ip.d))){
		printf("%s\n",mas[i].url);
	}
}
fclose(f);
}
В командной строке мы вводим имя екзешника, имя лог файла и айпи. И оно должно вывести посещенные сайты с этого айпи. Проблема в том, что адреса сайтов выводит некоректно и цепляет части из названий других сайтов (см. вложение). Может найдеться добрый человек и посоветует как исправить. Заранее спасибо
 

Вкладення

dreamer

Member
В командной строке мы вводим имя екзешника, имя лог файла и айпи. И оно должно вывести посещенные сайты с этого айпи. Проблема в том, что адреса сайтов выводит некоректно и цепляет части из названий других сайтов (см. вложение). Может найдеться добрый человек и посоветует как исправить. Заранее спасибо
Возможно Вам стоит добавить символ окончания строки в то место, где вы вырезаете из адреса хост.
Код:
u[p] = 0;
 

IrinaJuliet

New Member
Господа! зачем ломать! Время созидать!
Ищу вебмастера. сайт в англоязычном интернет требует рекламы и поддержки.
Жду резюме на zaka11@mail.ru
 

Cris

Member
люид может хто знает как создать поток в однйо программе но привязать его к другой - так мол это поток другой программы при чем необезательно чтобы он использовал адресное пространство первой программы?

и как можно сделать чтобы папка представлялась для виндовс в виде файла и расширениеем, и винда предлагала его открыть какойто программой?
 

zx

Member
люид может хто знает как создать поток в однйо программе но привязать его к другой - так мол это поток другой программы при чем необезательно чтобы он использовал адресное пространство первой программы?
так не бывает. по крайней мере я не сталкивался ни с одним прецедентом.

и как можно сделать чтобы папка представлялась для виндовс в виде файла и расширениеем, и винда предлагала его открыть какойто программой?
а так бывает ? хоть 1 пример. файнридер ? я чёто не уверен что он обучает эксплорер открывать папки. вобщем, тут хз..
 

Kaka

Кака
люид может хто знает как создать поток в однйо программе но привязать его к другой - так мол это поток другой программы при чем необезательно чтобы он использовал адресное пространство первой программы?

так бывает, только чего тебе из него нада ну вот выполняется оно, дискриптор можно оторвать, в памяти поколупатся

и как можно сделать чтобы папка представлялась для виндовс в виде файла и расширениеем, и винда предлагала его открыть какойто программой?

и так бывает, только нужно вдумчиво читать доку по DDK есть по крайней мере для висты дрова, не буду врать но перехватчик операций был, его даже както адаптировали для XP, короче если тебе нефик делать ближайшие года два можеш поколупатся:)
я даже больше скажу, вся єта дребедень делается и да я делал, только с реестром, банальным перехватыванием функций, абы только прога не пакованая была, но опять же. врееемени отжирает жуть, тыб лучше сказал зачем тебе
 
Останнє редагування:

Cris

Member
та для общих знаний)) про папки в виде файлов - самый явний пример я увидил вчера - Call of Duty 4 , хотел погамать на нашем серваке, там надобыло русифицировать игру - открыть файл как папку, кста могу дать(см.приложение), я его заархивировал, в файл - т.е в папку добавил другие для вида, откриваеться такой файл или тоталкомандером
про поток в другом процесоре надо и все тут)
 

Вкладення

Останнє редагування:
Зверху