コード例 #1
0
ファイル: udp_cli.c プロジェクト: DaniCF93/studia
int main(int argc, char * argv[]) {
   struct sockaddr_in adr_moj, adr_serw, adr_x;
   int s, i, slen=sizeof(adr_serw), snd, blen=sizeof(msgt),rec;
   char buf[BUFLEN];
   msgt msg;

   s=socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
   if(s < 0) blad("socket");
   printf("Gniazdko %d utworzone\n",s);
   memset((char *) &adr_serw, 0, sizeof(adr_serw));
   adr_serw.sin_family = AF_INET;
   adr_serw.sin_port = htons(PORT);
   if (inet_aton(argv[1], &adr_serw.sin_addr)==0) {
        fprintf(stderr, "inet_aton() failed\n");
        exit(1);
   }

   for (i=0; i<KROKI; i++) {
      printf("Sending packet %d\n", i);
      msg.typ = 1;
      sprintf(msg.buf, "Komunikat %d", i);
      snd = sendto(s, &msg, blen, 0, &adr_serw, slen);
      if(snd < 0) blad("sendto()");
      printf("Wyslano komunikat res: %d\n", snd);
      rec = recvfrom(s, &msg, blen, 0, &adr_x, &slen);
      if(rec < 0) blad("recvfrom()");
      sleep(1);
   }
   close(s);
   return 0;
}
コード例 #2
0
ファイル: udp_cli.c プロジェクト: DaniCF93/studia
int main(int argc, char * argv[]) {
   struct sockaddr_in adr_serw, adr_x;
   int s, i=0, slen=sizeof(adr_serw), snd, blen=sizeof(msgt),rec;
   // char buf[BUFLEN];
   msgt msg;
   fd_set socks;
   struct timeval t;
   int reply = 0;

   s=socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
   if(s < 0) blad("socket");
   printf("Gniazdko %d utworzone\n",s);
   memset((char *) &adr_serw, 0, sizeof(adr_serw));
   adr_serw.sin_family = AF_INET;
   adr_serw.sin_port = htons(PORT);
   if (inet_aton(argv[1], &adr_serw.sin_addr)==0) {
        fprintf(stderr, "inet_aton() failed\n");
        exit(1);
   }


    while(++i) {
        printf("--> Wysyłanie %d\n", i);
        msg.typ = 1;
        sprintf(msg.buf, "Komunikat %d", i);
        snd = sendto(s, &msg, blen, 0, &adr_serw, slen);
        if(snd < 0) blad("sendto()");
        printf("    Wyslano komunikat. res: %d\n", snd);

        reply = 0;

        while(1){
          FD_ZERO(&socks);
          FD_SET(s, &socks);
          t.tv_sec = 1;
          if(select(s+1, &socks, NULL, NULL, &t)){
            rec = recvfrom(s, &msg, blen, 0, &adr_x, &slen);
            if(rec < 0) blad("recvfrom()");
            printf("    Odpowiedz: %s\n", msg.buf);
            break;
          } else {
            if(reply > 4){
              printf("!!  Brak odpowiedzi !!\n");
              break;
            } else {
              reply++;
              printf("  * oczekiwanie na odpowiedz... %d\n", reply);
            }
          }
        }

        sleep(1);
     }

   close(s);
   return 0;
}
コード例 #3
0
ファイル: 06-leksyk.c プロジェクト: padamaszek/ZJP
void  leks (struct leksem* lk)
    // zasadnicza funkcja programu;
    // jej wywo³anie powoduje wczytanie odpowiedniej liczby charów z
    // wej¶cia i z³o¿enie z nich leksemu (lub sygnalizacjê b³êdu);
    // zak³adamy, ¿e w momencie wywo³ania w zmiennej globalnej  wejscie
    // jest ju¿ wczytany jeden char z wej¶cia;
    // po zakoñczeniu dzia³ania tej funkcji w tej zmiennej jest ju¿
    // wczytany jeden char na zapas
  {
    Stany  q, q1;
    Znaki  z;
    Boolean  koniec;
    q1 = STAN_POCZ; lk->dlug = 0; koniec = FALSE;
    do
      { z = kategoria(wejscie);
        q = q1; q1 = tab_symb[q][z];
        if (q1 == STAN_NIEOKR)  { /* b³±d */ q1 = q; koniec = TRUE; }  else
        if (q1 > STAN_AS)
          {   /* koniec leksemu */
            lk->zaw[lk->dlug] = wejscie; lk->dlug++; scanf("%c", &wejscie);
              /* Uwaga: brak sygnalizacji przepe³nienia tablicy  lk->zaw  */
            koniec = TRUE;
          }
        else
          { lk->zaw[lk->dlug] = wejscie; lk->dlug++; scanf("%c", &wejscie);
              /* Uwaga: brak sygnalizacji przepe³nienia tablicy  lk->zaw  */
          }
        }
    while (! koniec);
      // po zakoñczeniu powy¿szej pêtli w  q1  jest stan, na którym
      // automat zakoñczy³ dzia³anie; pozostaje sprawdziæ, czy to jest
      // stan akceptuj±cy i co akceptuj±cy
    switch (q1)
      { case STAN_POCZ   : blad("Nieoczekiwany znak", wejscie); break;
        case STAN_A      : blad("Mialo byc 'A' a jest", wejscie); break;
        case STAN_AD     : blad("Mialo byc 'AD' a jest", wejscie); break;
        case STAN_ADA      : blad("Mialo byc 'AS' a jest", wejscie); break;
        case STAN_ASI     : blad(" a jest", wejscie); break;
        case STAN_KA  : blad("Mialo byc 'KA' a jest", wejscie); break;
        case STAN_KAM    : blad("Mialo byc 'KAM' a jest", wejscie); break;
        case STAN_KAMI  : blad("Mialo byc 'KAMI' a jest", wejscie); break;
        case STAN_K   : blad("Mialo byc 'K' a jest", wejscie); break;
        case STAN_KAMIL  : lk->jed = MEZCZYZNA; break;
        case STAN_ADA  : lk->jed = KOBIETA; break;
        case STAN_KAMILA : lk->jed = KOBIETA; break;
	case STAN_ADAM : lk->jed = MEZCZYZNA; break;
	case STAN_ASIA :lk->jed = KOBIETA; break;
        case STAN_NIEOKR : blad("Nieoczekiwany znak", wejscie); break;
      }
  }
コード例 #4
0
ファイル: permutuj.c プロジェクト: chivay/inf-lab
/**
 * Kopiuje wejście na wyjście, permutując kolumny w sposób określony
 * argumentami programu.
 */
int main(int argc, char *argv[])
{
    int k, n, a;
    int *p = NULL;
    int *q = NULL;
    bool odwracanie = false;
    char *s = NULL;
    int rozmiar;

    n = argc - 1;
    k = 1;
    if (argc > 1 && strcmp(argv[1], ARG_ODWRACANIE) == 0) {
        odwracanie = true;
        --n;
        ++k;
    }
    rozmiar = (n > 0) ? n : 1;
    if ((p = malloc(rozmiar * sizeof *p)) == NULL) {
        blad(BRAK_MIEJSCA);
    }
    if ((a = wpisz_permutacje(argv + k, p, n)) != 0) {
        free(p);
        blad(a);
    }
    if (odwracanie) {
        if ((q = malloc(rozmiar * sizeof *p)) == NULL) {
            free(p);
            blad(BRAK_MIEJSCA);
        }
        odwrotna(p, n, q);
        free(p);
        p = q;
    }
    if ((s = malloc(rozmiar * sizeof *s)) == NULL) {
        free(p);
        blad(BRAK_MIEJSCA);
    }
    permutuj(p, n, s);
    free(s);
    free(p);
    return EXIT_SUCCESS;
}
コード例 #5
0
ファイル: zadanie3.c プロジェクト: michlord/kurs_c
int main(void)
{
    long long int wartosc;

    wartosc=wyrazenie();
    if (ost_wyraz != '=' && ost_wyraz != EOF)
      blad("Brak znaku = na końcu wyrażenia");

    printf("%lld\n",wartosc);
    return 0;
}
コード例 #6
0
ファイル: kopia2.c プロジェクト: padamaszek/ZJP
//   <T>  ::=  b <T> c |  e
Boolean  SS (drzewo* drz) {
  drzewo drz1;
  if (nowyleks('('))
   if (WW(&drz1))
    if (nowyleks(')')) {
      // Rozpoznalismy  w <T> , robimy z tego drzewo:
      drz->czyterm = FALSE;
      drz->ntm = S;
      drz->il_syn = 3;

      drz->syn[0] = (drzewo*)malloc(sizeof(drzewo));
      drz->syn[0]->czyterm = TRUE;
      drz->syn[0]->lk = '(';

      drz->syn[1] = (drzewo*)malloc(sizeof(drzewo));
      *(drz->syn[1]) = drz1;

      drz->syn[2] = (drzewo*)malloc(sizeof(drzewo));
      drz->syn[2]->czyterm = TRUE;
      drz->syn[2]->lk = ')';

      return TRUE;
    } 
    else  return blad("( <W> ??? -- oczekiwalem ')' ");
    else  return blad("(  ??? -- oczekiwalem <W> ");
    else
	if(nowyleks('a')) {
      // Rozpoznalismy tylko  e , robimy z niego drzewo:
      drz->czyterm = FALSE;
      drz->ntm = S;
      drz->il_syn = 1;

      drz->syn[0] = (drzewo*)malloc(sizeof(drzewo));
      drz->syn[0]->czyterm = TRUE;
      drz->syn[0]->lk = 'a';

      return TRUE;
    }
  else  return FALSE;
}
コード例 #7
0
ファイル: ileliter.c プロジェクト: kmieszala/C
main () {
  char znak;
  char znak2;
  int liczniki[30][30] ,j , i;

    // inicjalizacja licznikow:
  for (i=0; i<DL_ALFABETU; i++)  
for(j=0; j<DL_ALFABETU; j++)
	liczniki[i][j] = 0;
    // wczytywanie tekstu i zliczanie liter:
   znak2 = getchar(); 
   if(znak2 == EOF){  
	   blad("Wejscie powinno miec wiecej niz 1 znak!");    } 
   znak = getchar();   
   while (znak != EOF && znak2!=EOF) {    
	   if(znak == ' ' || znak == '\n'){  
	     	   znak2 = getchar();     
		   if(znak2 != EOF){      
			   znak = getchar();        }     
		   else        break;      }     
		   i = numer_litery(znak);  
	       	   j = numer_litery(znak2);  
	       	   if (i>=0 && j>=0)  liczniki[j][i] = liczniki[j][i]+1;    
		   znak2 = znak;   
		   znak = getchar();    }
			printf("\n"); 

    // drukowanie statystyki:
			
    printf("\nSTATYSTYKA:\n  "); 	
    for (i=0; i<DL_ALFABETU; i++)     
	    printf(" %c ", litera_o_numerze(i)); 
    for (i=0; i<DL_ALFABETU; i++){   
	    printf("\n%c ", litera_o_numerze(i));  
	    for(j=0; j<DL_ALFABETU; j++)     
	       	    printf(" %i ", liczniki[i][j]);    }   
	    printf("\n");
//drukowanie statystyki lista
	    for (i=0; i<DL_ALFABETU; i++)  
		    for (j=0; j<DL_ALFABETU; j++)    
			    printf("  %c%c: %4i\n", litera_o_numerze(i), litera_o_numerze(j),   liczniki[i][j]);  
	    printf("\n"); 
     	    return 0;  } 
コード例 #8
0
ファイル: zadanie3.c プロジェクト: michlord/kurs_c
static long long int czytaj_arg(void)
{
    long long int n=0;
    int znak;

    while (isspace(ost_znak) &&    (ost_znak=getchar()) != EOF) ;
    znak=(ost_znak == '-' ? -1 : 1);
    if (ost_znak == '+' || ost_znak == '-')
        ost_znak=getchar();
    if (isdigit(ost_znak))
        do {
	    n=10 * n + (ost_znak-'0');
	    ost_znak=getchar();
	} while (isdigit(ost_znak));
    else blad("brak argumentu");
    n*=znak;
    ost_wyraz=ARGUMENT;
    return n;
}
コード例 #9
0
ファイル: hogneg.c プロジェクト: Nigurasi/Zadanie3.1
int main(int argc, char* argv[]){
	if (argc < 7) blad();

	int dom = atoi(argv[1]);
	int rodzice = atoi(argv[2]);
	int bank = atoi(argv[3]);
	int ang = atoi(argv[4]);
	int weze = atoi(argv[5]);
	int zw = atoi(argv[6]);
	
	/*if (strcmp(argv[1], "t") || strcmp(argv[1], "T")) dom = 1;
	else dom = 0;

	if (strcmp(argv[2], "t") || strcmp(argv[2], "T")) rodzice = 1;
	else rodzice = 0;

	if (strcmp(argv[3], "t") || strcmp(argv[3], "T")) bank = 1;
	else bank = 0;

	if (strcmp(argv[4], "t") || strcmp(argv[4], "T")) ang = 1;
	else ang = 0;

	if (strcmp(argv[5], "t") || strcmp(argv[5], "T")) weze = 1;
	else weze = 0;*/

	if ( ((dom != 1))
	|| ( ((rodzice != 2) || ((( ang != 0) || (zw <= 0)) && ((weze != 0) || (bank != 0))))
	&& (( rodzice != 0) || (zw != 1) || (bank != 1) || (weze != 1) || (ang != 1))) ) {
		printf("Dostaniesz sie");
		return 1;
	}
	else printf("Nie dostaniesz sie");

	return 0;

}
コード例 #10
0
ファイル: 11.c プロジェクト: mkulesz/C
char  litera_o_numerze (int n) {
  if (0<=n && n<DL_ALFABETU)  return (char)((int)'a'+n);
  else  blad("zly numer litery");
}
コード例 #11
0
ファイル: 1zad.c プロジェクト: jbelcik/wstep_prog
char  litera_o_numerze (int n) {
    // jesli n<0 lub n>=DL_ALFABETU -- sygnal bledu
  if (0<=n && n<DL_ALFABETU)  return (char)((int)'a'+n);
  else  blad("zly numer litery");
}
コード例 #12
0
ファイル: lab8_serwerFTP.c プロジェクト: arjamizo/prog-wspo
int main(int argc, char * argv[]) {
	int fhbuf;
	struct sockaddr_in adr_moj, adr_cli;
	int s, i;
	unsigned int slen = sizeof(adr_cli), blen = sizeof(msgt);
	int snd, rec;
	char buf[BUFLEN];
	msgt msg;

	gethostname(buf, sizeof(buf));
	printf("Host: %s\n", buf);

	s = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
	if (s < 0)
		blad("socket");
	printf("Gniazdko %d utworzone\n", s);
	// Ustalenie adresu IP nadawcy
	memset((char *) &adr_moj, 0, sizeof(adr_moj));
	adr_moj.sin_family = AF_INET;
	adr_moj.sin_port = htons(PORT);
	adr_moj.sin_addr.s_addr = htonl(INADDR_ANY);
	if (bind(s, (struct sockaddr *) &adr_moj, sizeof(adr_moj)) == -1)
		blad("bind");

	enum MSGTYPE {
		WELCOME = 9,
		OPENWR = 0,
		OPENRD = 1,
		WRITE = 2,
		READ = 3,
		OPENDIR = 4,
		READDIR = 5,
		FCLOSE = 6,
		STAT = 7,
		FSTAT = 8
	};
	const *CMDS[20] = { "OPEN", "OPENRD", "WRITE", "READ", "OPENDIR",
			"READDIR", "FCLOSE", "STAT", "FSTAT", "WELCOME" };

	while (1) {
		rec = recvfrom(s, &msg, blen, 0, (struct sockaddr *) &adr_cli, &slen);
		if (rec < 0)
			blad("recvfrom()");
		//if (rec == 0)
		//	continue;
		printf("odebrano cos\n");
		if (0)
			printf(
					msg.buf,
					"SERWER: Odebrano komunikat z %s:%d reclen %d\n Typ: %d %s\n",
					inet_ntoa(adr_cli.sin_addr), ntohs(adr_cli.sin_port), rec,
					msg.typ, msg.buf);
		char cmd[100], arg[100], arg2[100];
		msg.typ = 100;
		printf("probuje sparsowac komende %s\n", msg.buf);
		sscanf(msg.buf, "%s %s %s", cmd, arg, arg2);
		printf("udalo mi sie wczytac komende: %s z argumentami %s %s\n", cmd, arg, arg2);
		for (i = 0; i < 10; ++i)
			if (strcmp(CMDS[i], cmd)==0)
				msg.typ = i;
		system("pwd");
		switch (msg.typ) {
		case WELCOME:
			sprintf(
					msg.buf,
					"Hi %s talking to me on %d port. I've received %d bytes. \n Typ: %d\n",
					inet_ntoa(adr_cli.sin_addr), ntohs(adr_cli.sin_port), rec,
					msg.typ//, msg.buf
			);
			printf(msg.buf);
			break;
		case OPENWR:
			msg.fh = open((const char*) arg, O_RDWR);
			break;
		case OPENRD:
			msg.fh = open((const char*) arg, O_RDONLY);
			break;
		case WRITE:
			fhbuf = msg.fh;
			printf("probuje zapisac do pliku %s tresc %s\n", arg, arg2);
			msg.fh = open((const char*) arg, O_RDWR | O_CREAT);
			msg.ile = write(msg.fh, (const char*) arg2, BUFLEN);
			close(msg.fh);
			msg.fh = fhbuf;
			break;
		case READ:
			fhbuf = msg.fh;
			msg.fh = open((const char*) arg, O_RDONLY);
			printf("KTOS CHCE PLIK Z KOMENDY (POLICJI) %s\n", msg.buf);
			if (msg.fh > 0){
				msg.ile = read(msg.fh, (const char*) msg.buf, BUFLEN);
				printf("odczytalem z pliku %s\n", msg.buf);
			}
			else
				perror("ERROR IN CASE READ!");
			close(msg.fh);
			msg.fh = fhbuf;
			break;
		case OPENDIR:
			msg.fh = opendir(arg);
			break;
		case READDIR:
//			fhbuf = msg.fh;
//			DIR *dir = opendir(arg);
//			do {
//		        errno = 0;
//		        if ((dp = readdir(dirp)) != NULL) {
//		            if (strcmp(dp->d_name, arg) != 0)
//		                continue;
//
//
//		            (void) printf("found %s\n", arg);
//		            (void) closedir(dirp);
//		                return;
//
//
//		        }
//				msg.fh = fhbuf;
			break;
		case FCLOSE:
			close(msg.fh);
		case STAT:
			perror("BRAK KOMENDY... \7\7POLICJI\n");
			break;
		case FSTAT:
			perror("BRAK KOMENDY... \7\7POLICJI\n");
			break;
		}
		snd = sendto(s, &msg, blen, 0, (struct sockaddr *) &adr_cli, slen);
		if (snd < 0)
			blad("sendto()");
		else {
			printf("wyslano");
		}
	}

	atexit(closeSocket);
	return 0;
}
コード例 #13
0
ファイル: udp_serw.c プロジェクト: krzysztoftc/wspolbiezne
int main(void) {
	struct sockaddr_in adr_moj, adr_cli;
	int s, i, slen=sizeof(adr_cli),snd, rec, blen=sizeof(msgt);
	char buf[BUFLEN];
	mms_t msg;

	gethostname(buf,sizeof(buf));
	printf("Host: %s\n",buf);

	s=socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
	if(s < 0) blad("socket");
	printf("Gniazdko %d utworzone\n",s);
	// Ustalenie adresu IP nadawcy
	memset((char *) &adr_moj, 0, sizeof(adr_moj));
	adr_moj.sin_family = AF_INET;
	adr_moj.sin_port = htons(PORT);
	adr_moj.sin_addr.s_addr = htonl(INADDR_ANY);
	if (bind(s,(struct sockaddr *) &adr_moj, sizeof(adr_moj))==-1)
		 blad("bind");

	// Odbior komunikatow ------------
	int run = 1;
	int result;
	while (run) {
		rec = recvfrom(s, &msg, blen, 0,(struct sockaddr *) &adr_cli, &slen);
		if(rec < 0) blad("recvfrom()");
		printf("Odebrano komunikat z %s:%d res %d\n  Typ: %d %s\n",
				inet_ntoa(adr_cli.sin_addr), ntohs(adr_cli.sin_port), rec,msg.typ,msg.buf);
		// Odpowiedz -----
		
		switch(msg.typ){
			case OPENW:
				printf("open O_WRONLY - nazwa: \"%s\"\n", msg.buf);
				msg.fh = open(msg.buf, O_WRONLY |O_CREAT, 0666);
				printf("Deskryptor pliku: %d\n", msg.fh);	
				break;
			
			case OPENR:
				printf("open O_RDONLY - nazwa: \"%s\"\n", msg.buf);
				msg.fh = open(msg.buf, O_RDONLY);
				printf("Deskryptor pliku: %d\n", msg.fh);	
				break;
			
			case READ:
				printf("read - fd: %d, count: %d\n", msg.fh, msg.ile);
				msg.ile = read(msg.fh, msg.buf, msg.ile);
				printf("Odczytano: %d bajtow\n", msg.ile);
				break;
			
			case CLOSE:
				printf("close - fh: %d\n", msg.fh);
				result = close(msg.fh);
				printf("Wynik: %d\n", result);
				break;
				
			case WRITE:
				printf("write - fd: %d, count: %d\n", msg.fh, msg.ile);
				msg.ile = write(msg.fh, msg.buf, msg.ile);
				printf("Zapisano: %d bajtow\n", msg.ile);
				break;
				
			case STOP:
				printf("Zamykanie serwera\n");
				run = 0;
				break;	
		}
		
		snd = sendto(s, &msg, blen, 0,(struct sockaddr *) &adr_cli, slen);
		if(snd < 0) blad("sendto()");
		printf("wyslano odpowiedz -res %d\n",snd);
		
	}
	close(s);
	return 0;
}