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.
(10 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 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" | 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 | ||
− | + | utime(s, ut) | |
− | + | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
'''End''' | '''End''' | ||
− | |||
=Riferimenti= | =Riferimenti= | ||
− | * | + | * 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