Identificar c o arq estah aberto

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

marcos.gurupi
Usuário Nível 4
Usuário Nível 4
Mensagens: 939
Registrado em: 06 Jul 2004 11:53
Localização: Gurupi-TO

Identificar c o arq estah aberto

Mensagem por marcos.gurupi »

Como fico sabendo por exemplo em uma rede de 20 micros c um determinado arquivo (dbf) estah aberto?

Marcos Roberto.
Marcos Roberto
NetService Software
Avatar do usuário
gvc
Colaborador
Colaborador
Mensagens: 1270
Registrado em: 23 Ago 2005 10:57

Re: Identificar c o arq estah aberto

Mensagem por gvc »

Como vc não especificou se é no sistema ou na rede, então:

No sistema, vc pode colocar select(<alias>)
Retorna Zero se não estiver aberto ou o número da área se estiver.

Na rede, se for novell, é pelo rconsole (conection type / avaliable servers / avaliable options / file open - lock activity / select an entry )
Se for Linux, eu já vi o pessoal aqui sofrer um pouco, mas acharam os usuários de um determinado arquivo.
Se tiver como fazer isso em uma P2P, eu gostaria muito de saber.

Boa sorte. Espero ter ajudado.
"TRS-80/Sincler/Apple/PC - Clipper Winter 85, tlink 1.0 [pc 10 MHz - 640K] {NEZ 8000 2Kb RAM}"
{POG - Programação Orientada a Gambiarra}
marcos.gurupi
Usuário Nível 4
Usuário Nível 4
Mensagens: 939
Registrado em: 06 Jul 2004 11:53
Localização: Gurupi-TO

Re: Identificar c o arq estah aberto

Mensagem por marcos.gurupi »

Na verdade eh em rede, ou seja, nao eh possivel!!

Marcos Roberto.
Marcos Roberto
NetService Software
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Mensagem por Maligno »

Se você analisar bem, verá que nem sempre essa informação é útil. Se descobre que um certo arquivo está aberto, no milissegundo seguinte ele poderá já ter sido fechado e você tomará uma decisão com base em uma falsa informação. Já que é rede, não há garantia. Agora, dependendo do que pretende fazer, talvez o melhor seja bloquear a abertura deste com o uso de semáforos.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Re: Identificar c o arq estah aberto

Mensagem por sygecom »

marcos.gurupi escreveu:Como fico sabendo por exemplo em uma rede de 20 micros c um determinado arquivo (dbf) estah aberto?

Marcos Roberto.
Eu verefico assim:

Código: Selecionar todos

TRY
   use ENTRADAS alias ENTRANDA excl new
catch e
   MsgInfo("Arquivo ENTRADA em Uso na Rede !!!")
   RETURN
END
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
marcos.gurupi
Usuário Nível 4
Usuário Nível 4
Mensagens: 939
Registrado em: 06 Jul 2004 11:53
Localização: Gurupi-TO

Re: Identificar c o arq estah aberto

Mensagem por marcos.gurupi »

Como citei acima eu estou desenvolvendo uma rotina de backup e como o meu sistema ao ser iniciado abre todos os dbf, eles n poderiam estah aberto na hora do backup, ou seja, no momento q o usuario fosse fazer o backup o sistema faria uma busca e se houvesse algum dbf aberto o backup n iniciaria. Vou testar o exemplo do colega Leonardo. Obrigado.

Marcos Roberto
Marcos Roberto
NetService Software
marcos.gurupi
Usuário Nível 4
Usuário Nível 4
Mensagens: 939
Registrado em: 06 Jul 2004 11:53
Localização: Gurupi-TO

Re: Identificar c o arq estah aberto

Mensagem por marcos.gurupi »

Segue uma resposta q tive na lista do xhb:


tche,
achei no help do xharbour essa função: DbRLockList()
ela retorna uma lista em um array dos registros bloqueados ... daí, fica
fácil testar ... use a NetErr() pra saber se a tabela está aberta em modo
exclusivo e DbRLockList() para saber se, passando no teste do NetErr() que
avisou termos uma tabela não aberta ou em modo compartilhado, se algum dos
registros dela está bloqueado ... em caso negativo, o acesso é pleno ...
executa um FLOCK() imediatamente para evitar que outro usuário resolva
utilizar a mesma ...

[]'s
Márson de Paula
Marcos Roberto
NetService Software
MARCELOG
Usuário Nível 4
Usuário Nível 4
Mensagens: 546
Registrado em: 15 Mar 2005 16:54
Localização: Divinópolis/MG

Re: Identificar c o arq estah aberto

Mensagem por MARCELOG »

Caro Marcos, beleza!
Vi a sua chamada no news e respondi.
Agora, se é prá backup, ou você faz como o Leonardo, ou seja, tenta usar o arquivo no modo exclusivo ou simplesmente faz o backup.
Se o uso exclusivo falhar é porque o arquivo está em uso por outro usuario no modo exclusivo ou compartilhado, então avise e pronto.
Agora, se é só backup, s.m.j. (sem maiores justificativas), não é preciso usar o arquivo exclusivamente, bastar ler os registros e gravar/ compactar, ou seja lá qual for o método que você usa e pronto uai.

MarceloG
Água mole em pedra dura tanto bate que até espirra!
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Mensagem por Maligno »

Abrir o arquivo em modo exclusivo apenas garante que ele não estava aberto antes do back-up. Se o programa de back-up precisa do arquivo fechado, ele terá de ser fechado e, no milissegundo seguinte ele pode ser aberto por alguém. Ou seja, não adiantou nada abrir em modo exclusivo. Seria melhor, a meu ver, ter um mecanismo para bloquear a abertura de arquivos, até que o back-up se complete. Um semáforo.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Identificar o uso de arquvio de dados para backup

Mensagem por Pablo César »

Para esse caso de realização de backup, eu faço como o Maligno mencionou (SEMAFORO + READONLY). Isto é, utilizo a criação de um arquivo que determina uso EXCLUSIVO e na existência dele, niniguém mais pode entrar apartir disso (isto eu denomino> SEMAFORO) e logo no meu sistema de backup verifico todos os arquivos DBF abrindo-os em modo exclusivo (como indicou o sygecom) se não retornar erro prosigo com o backup, senão dou uma mensagem em tela, dizendo que tal arquivo está sendo acessado, inclusive posso determinar que é que está acessando (qual é a estação e nome de usuário), isto consigo porque para cada estação que abre algum DBF crio um arquivo no servidor com nome da estação e o seu conetúdo é o nome do usuário. Continuando, visto a impossibilidade de realização de um backup com sucesso, saiu do programa de backup deletando aquele arquivo PARATUDO.SYS. Claro que no meu sistema, antes de abrir algum arquivo, verifica a existência desse arquivo.
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Re: Identificar c o arq estah aberto

Mensagem por rochinha »

Amiguinhos,

Gurupi - Voce tem algum exemplo de uso desta dbRLockList()? Posta ai.

Bom no meu sistema, na reorganização eu uso alguns meios de travar os arquivos e testa-los.

Primeiro eu testo os arquivos que vou reorganizar verificando em baixo nivel se estão travados. Estando travados minha rotina fica em loop travando outros arquivos, até estar apta a iniciar o processo.

Faço esta verificação e marcação diretamente em meu arquivo de indices que contem os nomes, chaves, indices de cada arquivo que necessita de indices.

O uso de um arquivo .DBF contendo informações sobre os indices me ajuda a alteração e manutenção de chaves, etc e como uso .CDX fica muito fácil a abertura, eliminando programação via código.

Eu uso este trecho para testar se o arquivo esta travado:

Código: Selecionar todos

FUNCTION dblocked( dbf )
  ldbf := FOPEN( dbf, 1 )
  IF FERROR() <> 0
     RETURN .t.
  ENDIF
  FCLOSE(ldbf)
  RETURN .f.
Quando minha rotina de reorganização entra em ação ela gera um arquivo/trava que só é liberado no final do processo:

Código: Selecionar todos

FUNCTION Indexando(Indexando)
   retorno = .t.
   if Indexando = NIL
      return iif(file("index.log"), .t., .f.)
   else
      if Indexando = .t.
         errhandle = fcreate("index.log")
         fwrite(errhandle,"indexando arquivos")
         fclose(errhandle)
      else
         ferase("index.log")
      endif
   endif
   RETURN retorno
Quando quero iniciar o processo uso Indexando(.t.) e para testar se a reorganização esta ocorrendo uso if Indexando
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Responder