Differenze tra le versioni di "Creare un link simbolico di un file"

Da Gambas-it.org - Wikipedia.
 
(4 versioni intermedie di uno stesso utente non sono mostrate)
Riga 1: Riga 1:
 
Per creare un link simbolico di un file, è possibile utilizzare almeno due modalità che prevedono entrambe il richiamo di due librerie esterne.
 
Per creare un link simbolico di un file, è possibile utilizzare almeno due modalità che prevedono entrambe il richiamo di due librerie esterne.
 
  
 
==Uso della libreria ''libc.6.so''==
 
==Uso della libreria ''libc.6.so''==
Per creare un file link simbolico di un file esistente, è possibile utilizzare la funzione esterna ''symlink()'' della libreria ''libc.6.so'' .
+
Per creare un file link simbolico di un file esistente, è possibile utilizzare la funzione esterna "symlink()" della libreria condivisa ''libc.6.so'' .
<BR>Se il link simbolico e' gia' esistente, la funzione ''symlink()'' fallisce e restituisce il valore -1 .
+
<BR>Se il link simbolico è già esistente, la funzione "symlink()" fallisce e restituisce il valore -1 .
 
 
E' necessario richiamare in Gambas la libreria dinamica condivisa: ''libc.6.so''
 
  
 +
E' necessario richiamare in Gambas la libreria condivisa: "''libc.6.so'' ".
  
 
Mostriamo un esempio:
 
Mostriamo un esempio:
Riga 17: Riga 15:
 
   
 
   
 
   
 
   
  '''Public''' Sub Main()
+
  Public Sub Main()
 
+
 
   Dim err As Integer
 
   Dim err As Integer
 +
 +
  err = symlink("<FONT Color=gray>''/percorso/del/file/esistente''</font>", "<FONT Color=gray>''/percorso/del/link/simbolico''</font>")
 +
  If err = -1 Then Error.Raise("Impossibile creare il link simbolico !")
 
    
 
    
  err = symlink("<FONT Color=gray>''/percorso/del/file/esistente''</font>", "<FONT Color=gray>''/percorso/del/link/simbolico''</font>")
+
  End
  If err = -1 Then Error.Raise("Impossibile creare il link simbolico !")
 
 
 
  '''End'''
 
 
 
  
  
 
==Uso della libreria ''libgio-2.0.so==
 
==Uso della libreria ''libgio-2.0.so==
Per creare un file link simbolico di un file esistente, è possibile utilizzare un paio di funzioni della libreria ''libgio-2.0.so'' .
+
Per creare un file link simbolico di un file esistente, è possibile utilizzare un paio di funzioni della libreria condivisa ''libgio-2.0.so'' .
<BR>Se il link simbolico e' gia' esistente, la funzione ''symlink()'' fallisce e restituisce il valore booleano ''False''.
+
<BR>Se il link simbolico e' già esistente, la funzione esterna "g_file_make_symbolic_link()" fallisce e restituisce il valore booleano ''False''.
  
E' necessario richiamare in Gambas la libreria dinamica condivisa: ''libgio-2.0.so''
+
E' necessario richiamare in Gambas la libreria condivisa: "''libgio-2.0.so.0.7200.4'' ".
  
 
Mostriamo un esempio:
 
Mostriamo un esempio:
  Library "libgio-2.0"
+
  Library "libgio-2.0:0.7200.4"
 
   
 
   
 
  <FONT Color=gray>' ''GFile * g_file_new_for_path (const char *path)''
 
  <FONT Color=gray>' ''GFile * g_file_new_for_path (const char *path)''
Riga 41: Riga 38:
 
  Private Extern g_file_new_for_path(path As String) As Pointer
 
  Private Extern g_file_new_for_path(path As String) As Pointer
 
   
 
   
  <FONT Color=gray>' ''gboolean g_file_make_symbolic_link (GFile *file, const char *symlink_value, GCancellable *cancellable, GError **error)
+
  <FONT Color=gray>' ''gboolean g_file_make_symbolic_link (GFile *file, const char *symlink_value, GCancellable *cancellable, GError **error)''
 
  ' ''Creates a symbolic link named file which contains the string symlink_value.''</font>
 
  ' ''Creates a symbolic link named file which contains the string symlink_value.''</font>
 
  Private Extern g_file_make_symbolic_link(GFile As Pointer, symlink_value As String, cancellable As Pointer, GError As Pointer) As Boolean
 
  Private Extern g_file_make_symbolic_link(GFile As Pointer, symlink_value As String, cancellable As Pointer, GError As Pointer) As Boolean
 
   
 
   
 +
<FONT Color=gray>' ''void g_object_unref (gpointer object)''
 +
' ''Decreases the reference count of object.''</font>
 +
Private Extern g_object_unref(gobject As Pointer)
 
   
 
   
  '''Public''' Sub Main()
+
   
 +
Public Sub Main()
 
   
 
   
 
   Dim gf As Pointer
 
   Dim gf As Pointer
Riga 52: Riga 53:
 
    
 
    
 
  <FONT Color=gray>' ''Genera un generico file (che diventerà poi il link simbolico):''</font>
 
  <FONT Color=gray>' ''Genera un generico file (che diventerà poi il link simbolico):''</font>
  gf = g_file_new_for_path("<FONT Color=gray>''/percorso/del/futuro/link/simbolico''</font>")
+
  gf = g_file_new_for_path("<FONT Color=gray>''/percorso/del/futuro/link/simbolico''</font>")
  If IsNull(gf) Then Error.Raise("Impossibile creare il file !")
+
  If gf == 0 Then Error.Raise("Impossibile creare il file !")
 
+
 
 
  <FONT Color=gray>' ''Trasforma il file, appena creato, in un link simbolico del file principale qui specificato nel 2° argomento:''</font>
 
  <FONT Color=gray>' ''Trasforma il file, appena creato, in un link simbolico del file principale qui specificato nel 2° argomento:''</font>
  bo = g_file_make_symbolic_link(gf, "<FONT Color=gray>''/percorso/del/file/principale''</font>", 0, 0)
+
  bo = g_file_make_symbolic_link(gf, "<FONT Color=gray>''/percorso/del/file/principale''</font>", 0, 0)
  If bo = False Then Error.Raise("Impossibile creare il file simbolico !")
+
  If bo == False Then Error.Raise("Impossibile creare il file simbolico !")
 +
 +
  g_object_unref(gf)
 
    
 
    
  '''End'''
+
  End
 
 
  
  
Riga 67: Riga 69:
 
* http://www.gnu.org/software/libc/manual/html_node/Symbolic-Links.html
 
* http://www.gnu.org/software/libc/manual/html_node/Symbolic-Links.html
 
* http://linux.die.net/man/3/symlink
 
* http://linux.die.net/man/3/symlink
* https://developer.gnome.org/gio/stable/GFile.html#g-file-make-symbolic-link
+
* https://docs.gtk.org/gio/method.File.make_symbolic_link.html

Versione attuale delle 06:25, 31 lug 2023

Per creare un link simbolico di un file, è possibile utilizzare almeno due modalità che prevedono entrambe il richiamo di due librerie esterne.

Uso della libreria libc.6.so

Per creare un file link simbolico di un file esistente, è possibile utilizzare la funzione esterna "symlink()" della libreria condivisa libc.6.so .
Se il link simbolico è già esistente, la funzione "symlink()" fallisce e restituisce il valore -1 .

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

Mostriamo un esempio:

Library "libc:6"
 
' int symlink(const char *__from, const char *__to)
' Make a symbolic link to FROM named TO.
Private Extern symlink(__from As String, __to As String) as Integer


Public Sub Main()

 Dim err As Integer

 err = symlink("/percorso/del/file/esistente", "/percorso/del/link/simbolico")
 If err = -1 Then Error.Raise("Impossibile creare il link simbolico !")
 
End


Uso della libreria libgio-2.0.so

Per creare un file link simbolico di un file esistente, è possibile utilizzare un paio di funzioni della libreria condivisa libgio-2.0.so .
Se il link simbolico e' già esistente, la funzione esterna "g_file_make_symbolic_link()" fallisce e restituisce il valore booleano False.

E' necessario richiamare in Gambas la libreria condivisa: "libgio-2.0.so.0.7200.4 ".

Mostriamo un esempio:

Library "libgio-2.0:0.7200.4"

' GFile * g_file_new_for_path (const char *path)
' Constructs a GFile for a given path.
Private Extern g_file_new_for_path(path As String) As Pointer

' gboolean g_file_make_symbolic_link (GFile *file, const char *symlink_value, GCancellable *cancellable, GError **error)
' Creates a symbolic link named file which contains the string symlink_value.
Private Extern g_file_make_symbolic_link(GFile As Pointer, symlink_value As String, cancellable As Pointer, GError As Pointer) As Boolean

' void g_object_unref (gpointer object)
' Decreases the reference count of object.
Private Extern g_object_unref(gobject As Pointer)


Public Sub Main()

 Dim gf As Pointer
 Dim bo As Boolean
 
' Genera un generico file (che diventerà poi il link simbolico):
 gf = g_file_new_for_path("/percorso/del/futuro/link/simbolico")
 If gf == 0 Then Error.Raise("Impossibile creare il file !")
 
' Trasforma il file, appena creato, in un link simbolico del file principale qui specificato nel 2° argomento:
 bo = g_file_make_symbolic_link(gf, "/percorso/del/file/principale", 0, 0)
 If bo == False Then Error.Raise("Impossibile creare il file simbolico !")

 g_object_unref(gf)
  
End


Riferimenti