Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    puntatori

    Ciao, ho un problema nel capire una parte di questo codice.
    Mi hanno spiegato che

    if(strcmp(temp,"_")==0)

    sta ad indicare che temp "punta" alla fine di un messaggio. Volevo sapere perchè per indicare la fine di un messaggio si è scritto questo codice.

    Grazie

    codice:
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    #include <unistd.h>
    #include <sys/types.h>
    #include <sys/msg.h>
    #include <sys/ipc.h>
    #include <sys/shm.h>
    #include <sys/sem.h>
    
    #define DIMENSIONE 2560
    #define TAGLIA_OBJ 56
    #define TAGLIA_TXT 200
    #define NUM_MAX_MSG (DIMENSIONE/TAGLIA_OBJ + TAGLIA_TXT)
    
    typedef struct {
      int tipo;
      int memoria;
      int semaforo;
    } boot;
    
    typedef struct {
      char obj[TAGLIA_OBJ];
      char txt[TAGLIA_TXT];
    } message;
    
    message messaggio;
    
    void errore(char* temp){
      printf("%s",temp);
      exit(-1);
    }
    
    void printMenu() {
    	printf("==================================================\n");
    	printf("	BACHECA ELETTRONICA VOLATILE		\n");
    	printf("==================================================\n");
    	printf("A. Leggi tutti i messaggi nella bacheca;\n");
    	printf("B. Leggi un messaggio in bacheca;\n");
    	printf("C. Inserisci un messaggio in bacheca;\n");
    	printf("D. Rimuovi un messaggio dalla bacheca;\n");
    	printf("Q. Esci dal programma;\n");
    	printf("--------------------------------------------------\n");
    	printf("Immetti la tua scelta: ");
    }
    
    void readMessages(int ds_shm){
      char* temp;
      int cont =1;
      temp = shmat(ds_shm, NULL, SHM_R);
      if(temp == (char*) -1){
        printf("Errore nella call shmat\n");
        exit(-1);
      }
    
        while(strcmp(temp,"")!=0){
          if(strcmp(temp,"_")==0){ 
            temp += TAGLIA_OBJ + TAGLIA_TXT;
            cont++;
          }
          else{
            printf("Codice del messaggio: %d\n", cont);
            printf("Oggetto: %s\n", temp);
            temp+=TAGLIA_OBJ;
            printf("Testo: %s\n", temp);
            printf("--------------------------------------------------\n");
            temp += TAGLIA_TXT;
            cont++;
          }
        }
    
        }

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,303

    Moderazione

    Non è la prima volta che ti viene corretto il titolo della discussione...
    E' necessario che tu legga il regolamento e lo segua.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462

    Re: puntatori

    Originariamente inviato da Giuseppe83
    sta ad indicare che temp "punta" alla fine di un messaggio.
    Di cosa stai parlando?

    Di quale "messaggio" parli?

    Chi ti ha detto questa cosa?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  4. #4
    scusate per il titolo, ma non mi veniva un modo migliore per chiamarlo.

    provo a spiegarmi meglio:
    all'inizio faccio pongo temp nella memoria condivisa con shmat() poi c'è il ciclo while con il quale scandisco tutta la memoria(infatti utilizzo strcmp(temp,"")!=0).

    il problema mio è if(strcmp(temp,"_")==0)
    Mi è stato detto da un ragazzo che programma in c che "_" indica la fine di un messaggio che è stato inserito attraverso il metodo postAMessage().
    Un messaggio è composto dai campi "Oggetto e testo" ed è composto da 2 array di caratteri di taglia TAGLIA_OBJ TAGLIA_TXT.
    Quindi per spostarmi da un messaggio all'altro incrementerò temp così:
    temp += TAGLIA_OBJ + TAGLIA_TXT;

    Spero di essere stato un pò più chiaro...scusate ancora


    codice:
     void postAMessage(int ds_shm, int ds_sem){
          int letti;
          int ret;
          int index = 1;
          char* temp;
          struct sembuf oper;
          /*Blocco i semafori*/
          oper.sem_num = 0;
          oper.sem_op = -1;
          oper.semflg = 0;
          ret = semop(ds_sem, &oper, 1);  
          oper.sem_num = 1;
          oper.sem_op = -1;
          oper.sem_flg = 0;
          ret = semop(ds_sem, &oper, 1);
    
          temp = shmat(ds_shm, NULL, SHM_W);
          if(temp == (char*) -1){
            printf("errore nella call shmat\n");
            exit(-1);
          }
          while(strcmp(temp,"")!=0){
            if(strcmp(temp, "_") == 0 || index > NUM_MAX_MSG)
            break;
            else if(index == NUM_MAX_MSG){
    
              /*Sblocco i semafori*/
              oper.sem_num = 0;
              oper.sem_op = 1;
              oper.sem_flg = 0;
              ret = semop(ds_sem, &oper, 1);
    
              oper.sem_num = 1;
              oper.sem_op = 1;
              oper.sem_flg = 0;
              ret = semop(ds_sem, &oper, 1);
    
              printf("Bacheca piena, riprovare più tardi\n");
            }
            else{
              temp += TAGLIA_OBJ + TAGLIA_TXT;
              index ++;
            }
          }
            printf("Oggetto: \n");
            scanf("%s\n", &messaggio.obj);
            strcnpy(temp,messaggio.obj,TAGLIA_OBJ);
            temp += TAGLIA_OBJ; 
    
            printf("Testo: \n");
            scanf("%s\n",&messaggio.txt);
            strncpy(temp,messaggio.txt, TAGLIA_TXT);
            temp += TAGLIA_TXT; 
    
            /*Sblocco i semafori*/
            oper.sem_num = 0;
            oper.sem_op = 1;
            oper.sem_flg = 0;       
            ret = semop(ds_sem, &oper, 1);
    
            oper.sem_num = 1;
            oper.sem_op = 1;
            oper.sem_flg = 0;
            ret = semop(ds_sem, &oper, 1);
    
            exit(0);
    
        }

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.