Conoscere caratteristiche generali dei file: differenze tra le versioni
Vai alla navigazione
Vai alla ricerca
(Creata pagina con 'Per ottenere informazioni di tipo generale sui file, è possibile operare con risorse di Gambas o del linguaggio C. ==Uso della Classe ''Stat()'' di Gambas== Per l'uso della...') |
Nessun oggetto della modifica |
||
| Riga 7: | Riga 7: | ||
==Uso della funzione '' | ==Uso della funzione ''stat()'' di C== | ||
La funzione '' | La funzione ''stat()'' di C potrà essere richiamata in modo<SPAN Style="text-decoration:underline">diretto</span> come funzione esterna mediante ''Extern'', come descritto nella [[Stat_()|seguente pagina della Wiki]], oppure utilizzandola in modo <SPAN Style="text-decoration:underline">indiretto</span> attraverso la creazione di una libreria esterna condivisa ''ad hoc''. | ||
Versione delle 17:07, 14 nov 2014
Per ottenere informazioni di tipo generale sui file, è possibile operare con risorse di Gambas o del linguaggio C.
Uso della Classe Stat() di Gambas
Per l'uso della risorsa Stat() di Gambas rimandiamo a questa pagina della Wiki.
Uso della funzione stat() di C
La funzione stat() di C potrà essere richiamata in mododiretto come funzione esterna mediante Extern, come descritto nella seguente pagina della Wiki, oppure utilizzandola in modo indiretto attraverso la creazione di una libreria esterna condivisa ad hoc.
In questo secondo caso, il sorgente della libreria condivisa ad hoc, che salveremo ad esempio nella cartella del sorgente del programma Gambas, potrà essere il seguente:
#include <sys/stat.h>
struct stat status;
int Chiama_stat(const char *s, struct stat *st) {
int r;
r = stat(s, &status);
*st = status;
return r;
}
Il codice Gambas del programma principale sarà:
Public Struct STATUS_File
st_dev As Long
st_ino As Long
st_nlink As Long
st_mode As Integer
st_uid As Integer
st_gid As Long
st_rdev As Long
st_size As Long
st_blksize As Long
st_blocks As Long
st_atime As Long
unused1 As Integer
st_mtime As Long
unused2 As Long
st_ctime As Long
__glibc_reserved[3] As Long
End Struct
Library "libc:6"
' tm* localtime( const time_t *time )
' Converts given time since epoch as time_t value into calendar time, expressed in local time.
Private Extern localtime(tm As Pointer) As Pointer
' char* asctime( const tm* time_ptr )
' Converts given calendar time tm to a textual representation.
Private Extern asctime(time_ptr As Pointer) As String
Private Extern Chiama_stat(nomefile As String, stFile As STATUS_File) As Integer In "/tmp/libSTATUS"
Public Sub Main()
Dim i As Integer
Dim stS As New STATUS_File
Dim at, mt, ct As Long
Dim s As String = "/percorso/del/file"
' Generiamo la nostra libreria esterna ad hoc:
Shell "gcc -o /tmp/libSTATUS.so " & Application.Path &/ "libSTATUS.c -shared -fPIC" Wait
i = Chiama_stat(s, stS)
If i <> 0 Then Error.Raise("Errore nella chiamata della funzione 'Chiama_stat()' !")
Print "File controllato: "; s
Print
With stS
Print .st_dev
Print .st_ino
Print .st_nlink
Print .st_mode
Print .st_uid
Print .st_gid
Print .st_rdev
Print .st_size; " byte"
Print .st_blksize
Print .st_blocks
at = .st_atime
mt = .st_mtime
ct = .st_ctime
End With
Print asctime(localtime(VarPtr(at)))
Print asctime(localtime(VarPtr(mt)))
Print asctime(localtime(VarPtr(ct)))
End