Página 1 de 2 12 ÚltimoÚltimo
+ Responder ao Tópico



  1. #1
    kappalinux
    Alguem pode me dizer como q faço para tirar o buffer quando manipulo arquivos em C??

    por exemplo..meu problema eh o seguinte :
    /* decalaracao das variaveis*/
    FILE *passwd;
    char str[51],str2[10];

    /*Pego os usuarios do /etc/passwd q tenham id igual a 0*/
    sprintf(str,"%s","cat /etc/passwd | grep :0:0: | tac | cut -d':' -f1");

    /*logo em seguinda passo isso para um arquivo*/
    passwd = popen(str,"r");

    /*Na sequencia esse trecho joga o conteudo do ponteiro para string q contem o comando q kero executar em str2*/
    while(!feof(passwd))
    {
    fgets(str2,3,passwd); /* Trecho x do codigo*/
    printf(str2);
    }

    Eh o seguinte eu inicializei str2[10]. eu nao deve colocar "no trecho x do codigo" fgets(str2,9,passwd)?? quando eu utilizo dessa maneira eu tenho problema do buffer. O programa "printa" por ultimo a mesma coisa que "printou" por primeiro..a unica solucao q eu achei foi colocar o valor 3.
    eu fiz um teste com fgets(str2,3,passwd) e tive o resultado esperado:
    $./id-check
    root
    fulano

    agora quando eu uso a sintaxe que deveria ser a "correta" nao tenho o resultado esperadoagora usando-> fgets(str2,9,passwd) )
    $./id-check
    root
    fulano
    root



    Ateh onde eu sei. fgets tem a seguinte sintaxe:
    fgets(char *str, in length, FILE *fp)
    onde fgets le a string da stream especificada ateh que um caractere da nova linha seja lido ou que length-1 caracteres tenham sido lidos.

    Alguem sabe me dizer pq estah acontecendo isso..??
    Mais uma pergunta..eu podria limpar o buffer com fflush()? tentei mas nao tive sucesso tb...se alguem puder me ajudar com o fflush tb eu agradeço.
    falooow
    []'s
    ateh++
    ;-)

  2. eae cara.....eu num so muito chegado no fgets especialmente por esse maldito "int lenght", por isso tenta fazer assim:

    /* decalaracao das variaveis*/
    FILE *passwd;
    char str[51],*str2=malloc(10);
    int ch;

    /*Pego os usuarios do /etc/passwd q tenham id igual a 0*/
    sprintf(str,"%s","cat /etc/passwd | grep :0:0: | tac | cut -d':' -f1");

    /*logo em seguinda passo isso para um arquivo*/
    passwd = popen(str,"r");

    /*Na sequencia esse trecho joga o conteudo do ponteiro para string q contem o comando q kero executar em str2*/
    while((ch=fgetc(passwd))>0)
    {
    if(ch!='\n' && ch!='\r'){
    sprintf(str2,"%s%c",str2,ch);
    }else{
    printf("%s",str2);
    sprintf(str2,"%c",ch);
    }
    }

    aki funcionou....v se ai vai tbm :wink:



  3. #3
    kappalinux
    valeu SDM isso mesmo q eu keria..
    ;-)
    de onde vc tirou isso??
    ele da um warning no momento em q vc compilou ai??

  4. da warning sim....eh aquele maldiro "make pointer from integer" mas soh q se vc tentar arrumar ele colocando por exemplo mais em baixo a alocacao de memoria:

    *str2=malloc(20);

    ele nao funciona mais.....por isso normalmente eu ignoro esse erro....mas se vc souber como resolver esse problema me avisa pq eu to faz moh tempao tentando arrumar isso.....e pra ver as funcoes de leitura de arquivo roda um
    $ man fgetc

    q ele fala como funciona as funcoes :wink:



  5. #5
    kappalinux
    hummm legal legal cara...eu perguinte pq eu conheci fgets e fscanf
    mas fgetc eu nao conhecia..ele funciona como? ele le um caracter por a cada loop no while??

    entao eu resolvi o probleminha do warning na declaracao da variavel..
    *str2=(char *)malloc(10);
    ;-)






Tópicos Similares

  1. Continua o problema com rota
    Por redoctober no fórum Servidores de Rede
    Respostas: 13
    Último Post: 08-11-2002, 13:04
  2. Problema com os log do Apache
    Por Good_speed no fórum Servidores de Rede
    Respostas: 1
    Último Post: 28-10-2002, 08:51
  3. Problemas com Perl
    Por adcorp no fórum Servidores de Rede
    Respostas: 1
    Último Post: 17-08-2002, 11:52
  4. Problema com o ssh pelo windows !!!
    Por embbr no fórum Servidores de Rede
    Respostas: 1
    Último Post: 01-07-2002, 18:10
  5. problemas com o IMP
    Por marlonfuchs no fórum Servidores de Rede
    Respostas: 0
    Último Post: 27-06-2002, 08:13

Visite: BR-Linux ·  VivaOLinux ·  Dicas-L