hb_vfOpen() não cria arquivo em compartilhamento Linux

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

Moderador: Moderadores

Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

hb_vfCreate() pasta linux

Mensagem por JoséQuintas »

Tá... errei no texto ao colocar o nome, não existe hb_vfCreate()
Pensando bem... se não me engano também tinha dado problema no uso exclusivo do Windows com hb_vfClose()
Se eu tiver tempo eu confirmo isso.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

hb_vfCreate() pasta linux

Mensagem por JoséQuintas »

fclose.png
Realmente foi bom você insistir tanto....
O problema é maior do que eu coloquei:

hb_vfClose() deu problema com Windows Server sozinho
hb_vfOpen(), pra criar arquivo, deu problema com Windows Server + Linux

Suas explicações poderiam valer pra segunda situação, se não tivesse dado problema na primeira.

Mas não tenho certeza se foi só Windows Server sozinho, ou se também no Windows 10 sozinho.
Isso eu já não vou testar, porque tenho mais o que fazer.
Uso Harbour 3.4, e ninguém vai mexer nele mesmo... então tanto faz.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

hb_vfCreate() pasta linux

Mensagem por Itamar M. Lins Jr. »

Olá!
Suas explicações poderiam valer pra segunda situação, se não tivesse dado problema na primeira.
É fake, pra todo lado !

Uso isso ai em uma rotina que abre e fecha pelo menos MIL NFCe por dia, isso só em 1 cliente.

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

hb_vfCreate() pasta linux

Mensagem por JoséQuintas »

Itamar M. Lins Jr. escreveu:É fake, pra todo lado !
Uso isso ai em uma rotina que abre e fecha pelo menos MIL NFCe por dia, isso só em 1 cliente.
Podemos concluir então, que se funciona com você, qualquer problema em outro lugar é mentira.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

hb_vfCreate() pasta linux

Mensagem por Itamar M. Lins Jr. »

Olá!
Podemos concluir então, que se funciona com você, qualquer problema em outro lugar é mentira.
Se vc se desse pelo menos o trabalho de ler. Não falaria uma bobagem dessa.
O hbmk2 usa essas ai que postei em todos os OS que roda o Harbour.
Esse código está no hbmk2.exe então todos que usam no mundo usam de pirraça pq não funciona. Nem no Linux/Windows/MacOS...

E vc é deus todo poderoso que quer condenar o que não sabe não entende.

Código: Selecionar todos

              IF hbmk[ _HBMK_lINC ]
                  IF hbmk[ _HBMK_lREBUILD ] .OR. ! hb_MemoRead( l_cCSTUB ) == cFile
                     hFile := hb_vfOpen( l_cCSTUB, FO_CREAT + FO_TRUNC + FO_WRITE )
                  ELSE
                     hFile := ""
                  ENDIF
               ELSE
                  hFile := hb_vfTempFile( @l_cCSTUB,, "hbmk_", ".c" )
               ENDIF
               IF HB_ISSTRING( hFile )
                  AAdd( hbmk[ _HBMK_aC ], l_cCSTUB )
               ELSEIF hFile != NIL
                  hb_vfWrite( hFile, cFile )
                  hb_vfClose( hFile )

hbmk2.prg tem algumas, com somente READ e com WRITE ativado, em alguns pontos do PRG.

Quem usa PE mesmo ele abre pra gravar.(senha ?)

Código: Selecionar todos

   IF ( hFile := hb_vfOpen( cFileName, FO_READWRITE + FO_EXCLUSIVE ) ) != NIL
      IF ( cSignature := hb_vfReadLen( hFile, 2 ) ) == "MZ"
         hb_vfSeek( hFile, 0x003C, FS_SET )
         nPEPos := ;
            Bin2W( hb_vfReadLen( hFile, 2 ) ) + ;
            Bin2W( hb_vfReadLen( hFile, 2 ) ) * 0x10000
         hb_vfSeek( hFile, nPEPos, FS_SET )
         IF ! hb_vfReadLen( hFile, 4 ) == "PE" + hb_BChar( 0 ) + hb_BChar( 0 )
            nPEPos := NIL
         ENDIF
      ELSEIF cSignature + hb_vfReadLen( hFile, 2 ) == "PE" + hb_BChar( 0 ) + hb_BChar( 0 )
         nPEPos := 0
      ENDIF
Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

hb_vfOpen() não cria arquivo em compartilhamento Linux

Mensagem por JoséQuintas »

Agora entendo porque muita gente usa XHarbour.
É pra se livrar do Itamar kkkk
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

hb_vfOpen() não cria arquivo em compartilhamento Linux

Mensagem por Itamar M. Lins Jr. »

Olá!
Ressuscitando esse tópico, para informar.

Código: Selecionar todos

#include "fileio.ch"
//Maneira correta!
cArq := "arquivo.txt"
cTexto := "ALO MUNDO"
pFH := hb_vfopen( cArq, FO_CREAT + FO_TRUNC + FO_WRITE )
hb_vfWrite(pFH, cTexto)
hb_vfClose(pFH)

//Maneira que deu erro.
cArq := "arquivo.txt"
cTexto := "ALO MUNDO"
pFH := hb_vfopen( cArq )
hb_vfWrite(pFH, cTexto) //->Aqui deu erro
hb_vfClose(pFH)

//OUTRA Maneira que deu erro.
cArq := "arquivo.txt"
cTexto := "ALO MUNDO"
pFH := hb_FCreate( cArq )
hb_vfWrite(pFH, cTexto) //->Aqui deu erro
hb_vfClose(pFH)

//Mais OUTRA Maneira que deu erro.
cArq := "arquivo.txt"
cTexto := "ALO MUNDO"
pFH := FCreate( cArq )
hb_vfWrite(pFH, cTexto) //->Aqui deu erro
hb_vfClose(pFH)

Resumindo tem que usar hb_vfopen() com os atributos corretos -> FO_CREAT + FO_TRUNC + FO_WRITE

PS. ATENÇÃO!!!! O teste foi feito no WINDOWS 10!

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

hb_vfOpen() não cria arquivo em compartilhamento Linux

Mensagem por JoséQuintas »

Itamar M. Lins Jr. escreveu:pFH := hb_vfopen( cArq, FO_CREAT + FO_TRUNC + FO_WRITE )
Pode até ser assim, mas não concordo com esse uso.

Coisa elementar:
Acredito que FO_TRUNC seja de TRUNCATE, pra cortar o restante do arquivo, mas se é novo, não há o que cortar.

Seus testes só tem com e sem parâmetros, não tem com parâmetros parciais.

Também dá pra considerar que, se está criando, só pode ser pra gravar, apesar que poderia ser um arquivo somente leitura, mas mesmo assim seria pra gravar vazio ou não.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

hb_vfOpen() não cria arquivo em compartilhamento Linux

Mensagem por JoséQuintas »

JoséQuintas escreveu:apesar que poderia ser um arquivo somente leitura, mas mesmo assim seria pra gravar vazio ou não.
Situação interessante essa.
Um arquivo somente leitura só pode ser lido.
Será que o "criador" desse arquivo consegue criar gravando? ou será que mesmo pra ele fica impedido de gravar?
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

hb_vfOpen() não cria arquivo em compartilhamento Linux

Mensagem por Itamar M. Lins Jr. »

Olá!
seja de TRUNCATE, pra cortar o restante do arquivo, mas se é novo, não há o que cortar.
Sacode a poeira ai...
Truncar, neste caso penso eu, que se o arquivo(string) for muito GRANDE, ele vai gravar o que puder. Pode ser cArq:="c:\filmes\meu_filme_de_2T.mp4" ai ele gravará o que aguentar no "buffers?" limite do "OS ?"
O resto eu nem vou comentar.
Basta quem desejar fazer os testes, e melhorar ai as informações.
Eu fiz alguns testes, mas pode ser corrigido e/ou melhorado, com mais testes com LINHAS DE CÓDIGOS que é o quê nos interessa.
Ficar discutindo sem rumo e sem propósito é que não dá.

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

hb_vfOpen() não cria arquivo em compartilhamento Linux

Mensagem por JoséQuintas »

trunc.png
Como eu disse, corta o que existe antes.
FO_CREAT deixou de ser exclusivo pra criação, pode ser pra alteração.

Vixe... open pra create... create pra edit... o trem endoidou... e eu que tava errado kkkk
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

hb_vfOpen() não cria arquivo em compartilhamento Linux

Mensagem por Itamar M. Lins Jr. »

Olá!
A diferença é essa mesmo.
Enquanto desejo saber mais, como funciona as funções, e se tem bugs... Fica essa coisa sem sentido, que só atrapalha.
Se não pode ajudar, melhor não atrapalhar.
Bom provavelmente FO_TRUNC seja para cortar um arquivo e não da forma que pensei. Mas seria bom um exemplo.

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

hb_vfOpen() não cria arquivo em compartilhamento Linux

Mensagem por JoséQuintas »

Pra mim ficou claro, e esse já seria um exemplo.

O log de erros, compatível com XHarbour, pode ser adicionado ao anterior (append) ou somente o último erro.

Igual
SET ALTERNATE TO file
SET ALTERNATE TO file ADDITIVE

Foi a isso que me referi antes.
TRUNCATE seria pra quando o arquivo já existe, pra apagar o conteúdo anterior.
Comparando ao DBF, seria igual ao ZAP antes do APPEND.
Comparando ao SQL, seria igual ao TRUNCATE TABLE xxxx, antes do INSERT.
Mas.... não considero isso CREATE.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

hb_vfOpen() não cria arquivo em compartilhamento Linux

Mensagem por Itamar M. Lins Jr. »

Olá!
Acredito que neste post do Przemek, pode esclarecer mais um pouco pq temos a função hb_vfopen()

Código: Selecionar todos

Hi,
You are wrong and dummy files after crash do not create any problems.
This is quite good method but you have to bound it with locks.
In DOS based operating systems (DOS, Windows, OS2) you can use
file file deny flags flags for it, i.e.:

#innclude "fileio.ch"
#define LOCK_FILE := "c:\temp\myapp.lck"
function set_exclusive_lock()
return hb_FCreate( LOCK_FILE, FC_NORMAL, FO_EXCLUSIVE ) != F_ERROR


and then you can add to your main funciton:

if !set_exclusive_lock()
alert( "Program already active.;Terminating this next instance." )
endif

For POSIX systems you can use FOpen() with FO_CREAT flag and then
hb_FLock() to lock some region, i.e. 1-st byte. Such method is portable
and should work with all OS-es supporting file range locks, i.e.:

function set_exclusive_lock()
local hFile := FOpen( LOCK_FILE, FO_READWRITE + FO_EXCLUSIVE + FO_CREAT )
return hFile != F_ERROR .and. hb_FLock( hFile, 0, 1 )

Of course the LOCK_FILE has to be different for systems without
drive letters.

In both cases when process is terminated OS release locks so there is
no chance for dummy locks.

best regards,
Przemek 
https://terminalroot.com.br/2014/12/lin ... fopen.html
fopen() já tem na linguagem C e é pelo atributos que cria e ou abre.
/* Esta é a função de abertura de arquivos. Com modo 'w'(Abrir um arquivo texto para gravação. Se o arquivo não existir, ele será criado.
Se já existir, o conteúdo anterior será destruído.) */
pFile = fopen(arquivo , "w");
Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Responder