Differenze tra le versioni di "Modificare le date di accesso e di modifica dell'inode di un file con le risorse esterne di utime.h"

Da Gambas-it.org - Wikipedia.
 
(9 versioni intermedie di uno stesso utente non sono mostrate)
Riga 1: Riga 1:
Le date di accesso e di modifica di un file sono contenute nell'<I>inode</i> nel ''file system''.
+
Le date di "accesso" e di "modifica" di un file o di una directory sono contenute nell'<I>inode</i> nel ''file system''.
 
 
  
 
E' possibile modificare tali date, purché se ne abbia il permesso, mediante le risorse fornite dalla libreria ''libc.so.6'', e dichiarate nel file header ''utime.h'' .
 
E' possibile modificare tali date, purché se ne abbia il permesso, mediante le risorse fornite dalla libreria ''libc.so.6'', e dichiarate nel file header ''utime.h'' .
Riga 6: Riga 5:
 
Va tenuto conto che:
 
Va tenuto conto che:
 
* la risoluzione, accettata dai due membri della Struttura ''utimbuf'', è il minuto ''secondo''.
 
* la risoluzione, accettata dai due membri della Struttura ''utimbuf'', è il minuto ''secondo''.
* la data di partenza è impostata al ''01/01/1970 00:00:00''. Ciò significa che, assegnando ad un membro della predetta Struttura il valore 1000000, si imposta la data corrispondente a 1000000 di secondi trascorsi dalla data e dall'orario di partenza (''01/01/1970 00:00:00'').
+
* la data di partenza è impostata al ''01/01/1970 00:00:00'' (anche chiamata [https://it.wikipedia.org/wiki/Tempo_(Unix) Tempo Unix] o ''Epoch''). Ciò significa che, assegnando ad un membro della predetta Struttura il valore 1000000, si imposta la data corrispondente a 1000000 di secondi trascorsi dalla data e dall'orario di partenza (''01/01/1970 00:00:00'', ossia il ''Tempo Unix'').
 
* assegnando il valore 0 (zero) ad un membro della Struttura ''utimbuf'', si otterrà il risultato: ''sconosciuto''.
 
* assegnando il valore 0 (zero) ad un membro della Struttura ''utimbuf'', si otterrà il risultato: ''sconosciuto''.
 
* è possibile impostare anche valori negativi. In tal caso la data impostata sarà inferiore a quella di partenza.
 
* è possibile impostare anche valori negativi. In tal caso la data impostata sarà inferiore a quella di partenza.
* se il secondo argomento della funzione "''utime()''" è impostato a ''Null'', allora le date di accesso e di modifica del file sono impostate alla data corrente.
+
* se al secondo argomento della funzione esterna "utime()" si passa una data precedente a quella del ''Tempo Unix'', si otterrà un valore ''negativo''.
 +
* se il secondo argomento della funzione esterna "utime()" è impostato a ''Null'', allora le date di accesso e di modifica del file sono impostate alla data corrente.
  
 +
E' necessario richiamare in Gambas la predetta libreria condivisa: "''libc.so.6'' ".
  
E' necessario richiamare in Gambas la predetta libreria dinamica condivisa: "''libc.so.6''"
+
Mostriamo un esempio essenziale con un file:
 
+
Private Const EPOCH As String = "01/01/1970"
Mostriamo un esempio essenziale:
+
 +
 
  Library "libc:6"
 
  Library "libc:6"
 
   
 
   
Riga 32: Riga 34:
 
   Dim ut As New Utimbuf
 
   Dim ut As New Utimbuf
 
   Dim s As String
 
   Dim s As String
 +
 +
  s = "<FONT Color=gray>''/percorso/del/file''</font>"
 +
 
 +
  With ut
 +
<FONT Color=gray>' ''Cambia la data di "accesso" al file pari a 1661040000 secondi dalla data e dall'orario di partenza (Tempo Unix):''</font>
 +
    .actime = DateDiff(CDate(EPOCH), CDate("08/21/2022"), gb.Second)
 +
<FONT Color=gray>' ''Cambia la data di "modifica" del file pari a 1661040000 secondi dalla data e dall'orario di partenza (Tempo Unix):''</font>
 +
    .modtime = DateDiff(CDate(EPOCH), CDate("08/21/2022"), gb.Second)
 +
  End With
 
    
 
    
    s = "<FONT Color=gray>''/percorso/del/file''</font>"
+
  utime(s, ut)
   
+
    With ut
 
<FONT Color=gray>' ''Cambia la data di accesso al file a 1 secondo dalla data e dall'orario di partenza:''</font>
 
      .actime = 1
 
<FONT Color=gray>' ''Cambia la data di accesso al file a 59 secondi dalla data e dall'orario di partenza:''</font>
 
      .modtime = 59
 
    End With
 
   
 
    utime(s, ut)
 
 
 
 
  '''End'''
 
  '''End'''
 
  
  
  
 
=Riferimenti=
 
=Riferimenti=
* http://manpages.ubuntu.com/manpages/precise/it/man2/utime.2.html
+
* https://man7.org/linux/man-pages/man2/utime.2.html
 
* https://it.wikipedia.org/wiki/Inode
 
* https://it.wikipedia.org/wiki/Inode

Versione attuale delle 23:12, 23 apr 2023

Le date di "accesso" e di "modifica" di un file o di una directory sono contenute nell'inode nel file system.

E' possibile modificare tali date, purché se ne abbia il permesso, mediante le risorse fornite dalla libreria libc.so.6, e dichiarate nel file header utime.h .

Va tenuto conto che:

  • la risoluzione, accettata dai due membri della Struttura utimbuf, è il minuto secondo.
  • la data di partenza è impostata al 01/01/1970 00:00:00 (anche chiamata Tempo Unix o Epoch). Ciò significa che, assegnando ad un membro della predetta Struttura il valore 1000000, si imposta la data corrispondente a 1000000 di secondi trascorsi dalla data e dall'orario di partenza (01/01/1970 00:00:00, ossia il Tempo Unix).
  • assegnando il valore 0 (zero) ad un membro della Struttura utimbuf, si otterrà il risultato: sconosciuto.
  • è possibile impostare anche valori negativi. In tal caso la data impostata sarà inferiore a quella di partenza.
  • se al secondo argomento della funzione esterna "utime()" si passa una data precedente a quella del Tempo Unix, si otterrà un valore negativo.
  • se il secondo argomento della funzione esterna "utime()" è impostato a Null, allora le date di accesso e di modifica del file sono impostate alla data corrente.

E' necessario richiamare in Gambas la predetta libreria condivisa: "libc.so.6 ".

Mostriamo un esempio essenziale con un file:

Private Const EPOCH As String = "01/01/1970"


Library "libc:6"

Public Struct utimbuf
  actime As Long
  modtime As Long
End Struct

' int utime (const char *__file, const struct utimbuf *__file_times)
' Set the access and modification times of FILE to those given in *FILE_TIMES.
' If FILE_TIMES is NULL, set them to the current time.
Private Extern utime(__file As String, __file_times As Utimbuf) As Integer


Public Sub Main()
 
 Dim ut As New Utimbuf
 Dim s As String

 s = "/percorso/del/file"
 
 With ut
' Cambia la data di "accesso" al file pari a 1661040000 secondi dalla data e dall'orario di partenza (Tempo Unix):
   .actime = DateDiff(CDate(EPOCH), CDate("08/21/2022"), gb.Second)
' Cambia la data di "modifica" del file pari a 1661040000 secondi dalla data e dall'orario di partenza (Tempo Unix):
   .modtime = DateDiff(CDate(EPOCH), CDate("08/21/2022"), gb.Second)
 End With
 
 utime(s, ut)

End


Riferimenti