• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

souto

Comparar FILE streams.

8 mensagens neste tópico

Vivam,

Ha alguma forma de sabermos se dois FILE streams pertencem a um mesmo ficheiro?

Obrigado e cumprimentos.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Que eu saiba podes comparar directamente (file1==file2) o que vai comparar é o file descriptor, não dá para ver se o conteúdo de dois ficheiros é o mesmo.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ja tentei isso, nao da :thumbsup:

O codigo que usei foi este:

	
FILE* f1 = fopen("relatorio.odt","rb");
FILE* f2 = fopen("relatorio.odt","rb");
if (f1 == f2)
  printf("bla\n");

Obrigado.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ja tentei isso, nao da :thumbsup:

O codigo que usei foi este:

	
FILE* f1 = fopen("relatorio.odt","rb");
FILE* f2 = fopen("relatorio.odt","rb");
if (f1 == f2)
  printf("bla\n");

Obrigado.

Pois mas ai acho que crias dois descritores diferentes, por exemplo isto:



void teste(FILE* file){

  if (file == stdout)
    fprintf(file,"stdout\n");
  else
     fprintf(stdout,"outro ficheiro\n");
}

int main(void){

FILE* file;

  FILE* f1 = fopen("relatorio.odt","rb");
  teste(f1);
  teste(stdout);


}

Deve funcionar

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Sim, mas o que quero mesmo e algo parecido com o que esta no meu exemplo. Eu crio um descritor, e algum tempo depois, durante a execucao, existe a possibilidade de ser criado outro descritor que pode pertencer ao mesmo ficheiro. O que gostava de saber e se e possivel averiguar se dois descritores sao respectivos ao mesmo ficheiro.

Obrigado pelas respostas ate agora.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Penso que o que pedes não é possível. Podes no entanto contornar a limitação associando a cada um dos ficheiros abertos uma string com o nome do ficheiro.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Nunca experimentei mas um busca no google levou a isto

http://www.gnu.org/software/libc/manual/html_node/Control-Operations.html#Control-Operations

Parece que podes pedir um lock ao ficheiro com a função fcntl (int filedes, int command, ...) com o comando F_GETLK, isso deve impedir que o abras novamente, depois é só uma questão de gerires o erro da fopen()

É uma questão de experimentares

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Obrigado pelas respostas. Optei pela solucao juntamente com o nome do ficheiro.

Cumprimentos.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora