Ho le seguenti due strutture in cui "struttura figlio" ha una "struttura di rusage" come elemento.Programmazione C. Come copiare in profondità una struttura?
Poi creo due le strutture di tipo "figlio" chiamiamoli Childa e childB
Come faccio a copiare solo la struct rusage da Childa a childB?
typedef struct{
int numb;
char *name;
pid_t pid;
long userT;
long systemT;
struct rusage usage;
}child;
typedef struct{
struct timeval ru_utime; /* user time used */
struct timeval ru_stime; /* system time used */
long ru_maxrss; /* maximum resident set size */
long ru_ixrss; /* integral shared memory size */
long ru_idrss; /* integral unshared data size */
long ru_isrss; /* integral unshared stack size */
long ru_minflt; /* page reclaims */
long ru_majflt; /* page faults */
long ru_nswap; /* swaps */
long ru_inblock; /* block input operations */
long ru_oublock; /* block output operations */
long ru_msgsnd; /* messages sent */
long ru_msgrcv; /* messages received */
long ru_nsignals; /* signals received */
long ru_nvcsw; /* voluntary context switches */
long ru_nivcsw; /* involuntary context switches */
}rusage;
Ho fatto la seguente, ma credo che copia la posizione di memoria, perché se ho cambiato il valore di utilizzo in Childa, cambia anche in childB.
memcpy(&childA,&childB, sizeof(rusage));
So che fornisce a childB tutti i valori da childA. Mi sono già occupato degli altri campi in childB, ho solo bisogno di essere in grado di copiare la struttura di rusage chiamata usage che risiede nella struttura "child".
tutto il vostro lavoro il suggerimento di fare una copia esatta di Childa, ma se mai cambiare Childa, anche childB cambia. – user69514
C'è qualcos'altro che non va nel tuo codice. Tutte le risposte alla tua domanda sono corrette e produrranno l'effetto che desideri. Se non funziona, il problema è altrove. –
@uknown - ciò significa che le due istanze della struttura si trovano allo stesso indirizzo (ovvero che sono la stessa istanza) o che qualcosa sta cambiando due istanze distinte dei dati in due indirizzi diversi (o che si sta confondendo in cosa stai segnalando). – ChrisW