Clone (chiamata di sistema Linux): differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
SunBot (discussione | contributi)
m Bot: Standardizzo interwiki
 
(24 versioni intermedie di 20 utenti non mostrate)
Riga 1:
{{F|software libero|luglio 2015}}
<code>'''clone()'''</code> è una [[chiamata di sistema]] del [[kernel]] [[Linux]] correlata al [[multithreading]].
 
<code>'''clone()'''</code> è una [[chiamata di sistema]] del [[Linux (kernel)|kernel Linux]] che replica il [[Processo (informatica)|processo]] che la invoca, permettendogli di condividere con il nuovo processo parte del suo contesto d'esecuzione. Il costrutto, simile alla <code>[[Fork (programmazione)|fork]]()</code> dei sistemi operativi della [[Unix-like|UNIX compatibili]], che invece duplica processi per intero, è solitamente utilizzato per realizzare [[Concorrenza (informatica)|concorrenza]] a livello di [[Thread (informatica)|thread]], anziché di processo, sebbene per tali scopi spesso siano preferite alternative a più alto livello, come i [[POSIX Threads]].
La sintassi per chiamare <code>clone</code> all'interno di un programma Linux program è:
#include <sched.h>
int clone (int (*fn) (void *), void *child_stack, int flags, void *arg);
 
==Funzionamento==
<code>clone</code> avvia un nuovo [[thread]] che inizia con la funzione referenziata dall'argomento <code>fn</code> argument (laddove il comando <tt>[[fork]]()</tt> prosegue con l'istruzione immediatamente successiva al <tt>fork()</tt>.) L'argomento <code>child_stack</code> è un puntaotoe allo spazio di memoria da usare come [[stack]] del nuovo thread (che dovrà essere stato creato tramite [[malloc]]; in quasi tutte le architetture lo stack 'cresce' verso il basso, per cui il puntatore dovrà puntare alla ''fine'' dello spazio a disposizione, <code>flags</code> specifica quali parti del processo sono ereditate dal processo genitore e <code>arg</code> è l'argomento passato alla funziona. Il valore di ritorno è l'ID of the [[processo]] figlio, oppure -1 in caso di errore.
La sintassi per chiamare <code>clone</code> all'interno di un programma Linuxin programambiente Linux è:
<syntaxhighlight lang="c">
#include <sched.h>
int clone (int (*fn) (void *), void *child_stack, int flags, void *arg);
</syntaxhighlight>
 
<code>clone</code> avvia un nuovo [[Thread (informatica)|thread]] che inizia con la funzione referenziata dall'argomento <code>fn</code> argument (laddove il comando <ttkbd>[[fork (programmazione)|fork]]()</ttkbd> prosegue con l'istruzione immediatamente successiva al <ttkbd>fork()</ttkbd>.) L'argomento <code>child_stack</code> è un puntaotoepuntatore allo spazio di memoria da usare come [[pila (informatica)|stack]] del nuovo thread (che dovrà essere stato creato tramite [[malloc]]; in quasi tutte le architetture lo stack 'cresce' verso il basso, per cui il puntatore dovrà puntare alla ''fine'' dello spazio a disposizione, <code>flags</code> specifica quali parti del processo sono ereditate dal processo genitore e <code>arg</code> è l'argomento passato alla funzionafunzione. Il valore di ritorno è l'ID of thedel [[processo (informatica)|processo]] figlio, oppure -1 in caso di errore.
== Argomenti correlati ==
 
==Voci correlate==
*[[fork]]
* [[Thread (informatica)|Thread]]
* [[Fork (programmazione)]]
* [[Linux (kernel)]]
 
{{Portale|software libero}}
== Bibliografia ==
Questa pagina è la traduzione della pagina omonima della Wikipedia inglese.
 
[[Categoria:Software per il kernel Linux]]
[[Categoria:Funzioni della libreria standard del C]]
 
[[en:Clone (Linux system call)]]