Identificar c o arq estah aberto
Moderador: Moderadores
-
marcos.gurupi
- Usuário Nível 4

- Mensagens: 939
- Registrado em: 06 Jul 2004 11:53
- Localização: Gurupi-TO
Identificar c o arq estah aberto
Como fico sabendo por exemplo em uma rede de 20 micros c um determinado arquivo (dbf) estah aberto?
Marcos Roberto.
Marcos Roberto.
Marcos Roberto
NetService Software
NetService Software
Re: Identificar c o arq estah aberto
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.
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}
{POG - Programação Orientada a Gambiarra}
-
marcos.gurupi
- 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
Na verdade eh em rede, ou seja, nao eh possivel!!
Marcos Roberto.
Marcos Roberto.
Marcos Roberto
NetService Software
NetService Software
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!
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!
- sygecom
- Administrador

- Mensagens: 7131
- Registrado em: 21 Jul 2006 10:12
- Localização: Alvorada-RS
- Contato:
Re: Identificar c o arq estah aberto
Eu verefico assim:marcos.gurupi escreveu:Como fico sabendo por exemplo em uma rede de 20 micros c um determinado arquivo (dbf) estah aberto?
Marcos Roberto.
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
xHarbour.org + Hwgui + PostgreSql
-
marcos.gurupi
- 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
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
Marcos Roberto
NetService Software
NetService Software
-
marcos.gurupi
- 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
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
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
NetService Software
-
MARCELOG
- 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
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
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!
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!
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!
- Pablo César
- 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
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.
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.
- rochinha
- Administrador

- Mensagens: 4664
- Registrado em: 18 Ago 2003 20:43
- Localização: São Paulo - Brasil
- Contato:
Re: Identificar c o arq estah aberto
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:
Quando minha rotina de reorganização entra em ação ela gera um arquivo/trava que só é liberado no final do processo:
Quando quero iniciar o processo uso Indexando(.t.) e para testar se a reorganização esta ocorrendo uso if Indexando
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.
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
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.
@braços : ? )
A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.

