Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Qualcomm Snapdragon X2 Elite: l'architettura del SoC per i notebook del 2026
Qualcomm Snapdragon X2 Elite: l'architettura del SoC per i notebook del 2026
In occasione del proprio Architecture Deep Dive 2025 Qualcomm ha mostrato in dettaglio l'architettura della propria prossima generazione di SoC destinati ai notebook Windows for ARM di prossima generazione. Snapdragon X2 Elite si candida, con sistemi in commercio nella prima metà del 2026, a portare nuove soluzioni nel mondo dei notebook sottili con grande autonomia
Recensione DJI Mini 5 Pro: il drone C0 ultra-leggero con sensore da 1 pollice
Recensione DJI Mini 5 Pro: il drone C0 ultra-leggero con sensore da 1 pollice
DJI Mini 5 Pro porta nella serie Mini il primo sensore CMOS da 1 pollice, unendo qualità d'immagine professionale alla portabilità estrema tipica di tutti i prodotti della famiglia. È un drone C0, quindi in un peso estremamente contenuto e che non richiede patentino, propone un gimbal rotabile a 225 gradi, rilevamento ostacoli anche notturno e autonomia fino a 36 minuti. Caratteristiche che rendono il nuovo drone un riferimento per creator e appassionati
ASUS Expertbook PM3: il notebook robusto per le aziende
ASUS Expertbook PM3: il notebook robusto per le aziende
Pensato per le necessità del pubblico d'azienda, ASUS Expertbook PM3 abbina uno chassis particolrmente robusto ad un pannello da 16 pollici di diagonale che avantaggia la produttività personale. Sotto la scocca troviamo un processore AMD Ryzen AI 7 350, che grazie alla certificazione Copilot+ PC permette di sfruttare al meglio l'accelerazione degli ambiti di intelligenza artificiale
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 07-07-2006, 15:44   #21
trallallero
Senior Member
 
L'Avatar di trallallero
 
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
Quote:
Originariamente inviato da giovessj
ok ti kiedo solo un favore...qndo hai tempo potresti modificarmi il codice e aggiustarmelo in maniera corretta?...anke se è in c nn fa nulla al max poi lo modifico in c++...cmq ora ti lascio al tuo lavoro...se e qndo puoi riesci a farmi sto piacere te ne sarei grato...cmq grazie mille di tt
Codice:
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>


char **crea_vettore(char  *stringa);
void   dealloca    (char **array_di_stringhe);

int main(int argc, char *argv[])
{
	int pid, i;
	int status;
	char *stringa;
	//stringa dove memorizzo la stringa dei comandi
	char **stringhe;
	//array di stringhe

	stringa = (char *) calloc(20, sizeof(char));

	if ((stringa = fgets(stringa, 20, stdin)) == NULL)
		exit(1);
	while (strncmp(stringa, "stop", 4) != 0)
	{
		stringhe = crea_vettore(stringa);

		if ((pid = fork()) < 0)
		{
			perror("fork");
			exit(1);
		}
		else
		{
			if (pid == 0)
			{
				//figlio
					if (execvp(stringhe[0], stringhe) < 0)
					   perror("execvp"), exit(1);
			}
			else
			{
				//padre
					// aspetto la terminazione di mio figlio
					wait(&status);
				//dealloca(stringhe);
				//libero memoria
			} //fine
		} //fine
	} //fine while

	return 0; // CI VUOLE UN RITORNO 
}

char **crea_vettore(char *stringa)
{

	char **stringhe;
	char  *parola = NULL;
	int i = 0, size = 1, j = 0;

	if ((stringhe = (char **) malloc(size * sizeof(char *))) == NULL)
		perror("malloc"), exit(1);
	//errore allocazione

	while (stringa[i] != '\0')
	{
		//scandisco tutta la stringa e la divido in tante parole
		while ((stringa[i] != ' ') && (stringa[i] != '\0') && (stringa[i] != '\n'))
		{
			//costruisco la parola
			parola = (char *) realloc(parola, (j + 1) * sizeof(char *));
			parola[j] = stringa[i];
			j = j + 1;
			i = i + 1;
		}
		if ((stringa[i] == ' ') || (stringa[i] == '\n'))
			i = i + 1;

		printf("parola= %s\n", parola);

		if (parola != NULL)
		{
			//parola trovata
			stringhe = (char **) realloc(stringhe, (size + 1) * sizeof(char *));

			if ((stringhe[size - 1] = (char *) malloc(strlen(parola) + 1)) == NULL)
				perror("malloc"), exit(1);	//errore allocazione

			strcpy(stringhe[size - 1], parola);
			size = size + 1;
		}
		parola = NULL;
		j = 0;
	}
	stringhe[size - 1] = NULL;
	//fine dell array di stringhe

	return (stringhe);
}


void dealloca(char **array_di_stringhe)
{
	int i = 0;

	while (array_di_stringhe[i] != NULL)
	{
		free(array_di_stringhe[i]);
		i = i + 1;
	}
	free(array_di_stringhe[i]);
	free(array_di_stringhe);
}
ti ho corretto gli errori (non quelli logici) e adesso compila
ma non mi sembra corretta la "crea_vettore".
Solo che é un pó lungo ... devo solo fare una cosa poi
se entro le 17 la finisco lo leggo meglio

ps: scusa ma ho reindentato piú o meno a modo mio per capire meglio
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z Mb - Win Eight SP (1 > yours) 16 Valve
trallallero è offline   Rispondi citando il messaggio o parte di esso
Old 07-07-2006, 15:47   #22
Andlea
Senior Member
 
Iscritto dal: Nov 2004
Messaggi: 357
Quote:
Originariamente inviato da giovessj
No io devo scrivere il codice della shell...devo farla io la gestione della stringa in ingresso e la gestione dei processi padre e figlio...il codice ke mi hai scritto a ke serve????
Se ho capito bene ti basta fare una pipe, fare la fork, chiudere scrittura al padre, chiudere stdin, dupare la pipe in lettura, nel figlio chiudere estremo di lettura della pipe, chiudere stdout, dupare la pipe di scrittura e lanciare l'exec con l'argomento passato a parametro
Andlea è offline   Rispondi citando il messaggio o parte di esso
Old 07-07-2006, 15:59   #23
giovessj
Junior Member
 
Iscritto dal: Oct 2005
Messaggi: 20
Andlea è da dire ke io sn alle prime armi e quindi sinceramente nn ho capito quello ke vuoi dire...se potresti essere + gentile da spiegarti cn qlke esempio....
giovessj è offline   Rispondi citando il messaggio o parte di esso
Old 07-07-2006, 16:19   #24
Andlea
Senior Member
 
Iscritto dal: Nov 2004
Messaggi: 357
Ogni volta che ricevi un comando, crei una nuova pipe
Codice:
int piped[2];
...
pipe(piped);
dopodichè fai la fork()
Nel padre farai così
Codice:
close(piped[1]);  // chiudi estremo di scrittura della pipe
while((nread=read(piped[0], buff, MAX_BUFF))>0)
printf("%s", buff);
buff è un char*, MAX_BUFF una costante che puoi impostare ad esempio a 20
Questa parte di codice non fa altro che leggere quello che esce dalla pipe e visualizzarlo a schermo

Il figlio dovrà scrivere sulla pipe, per farlo fa così
Codice:
close(piped[0]);
close(1);
dup(piped[1]);
close(piped[1]);
exec(.....);
In questo modo chiude l'estremo di lettura della pipe, chiude lo standard output, e rimpiazza il descrittore dello stdout con l'estremo di scrittura della pipe
nell'exec farai la chiamata al comando impartito dall'utente, e il risultato verrà mandato nella pipe, ricvuta e visualizzata dal padre.

Una volta finito fai la wait(&status); e ricomincerai chiedendo il comando, ecc..
Andlea è offline   Rispondi citando il messaggio o parte di esso
Old 07-07-2006, 16:25   #25
trallallero
Senior Member
 
L'Avatar di trallallero
 
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
problema oracle rimandato a mercoledi

per adesso vedo un errore

sbagliato:
parola = (char *) realloc(parola, (j + 1) * sizeof(char *));
corretto
parola = (char *) realloc(parola, (j + 1) * sizeof(char));
stai allocando una stringa non una matrice

poi non ho capito il problema ...
il programma chiede una serie di comandi e tu per ogni comando lanci un figlio che lo esegue ?
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z Mb - Win Eight SP (1 > yours) 16 Valve
trallallero è offline   Rispondi citando il messaggio o parte di esso
Old 07-07-2006, 16:27   #26
trallallero
Senior Member
 
L'Avatar di trallallero
 
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
while (strncmp(stringa, "stop", 4) != 0)

ciclo infinito

se stringa é "ciao pippo pluto stop" la strncmp
punterá sempre a ciao quindi condizione sempre falsa
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z Mb - Win Eight SP (1 > yours) 16 Valve
trallallero è offline   Rispondi citando il messaggio o parte di esso
Old 07-07-2006, 16:28   #27
giovessj
Junior Member
 
Iscritto dal: Oct 2005
Messaggi: 20
si esattamente...cioè nn fa altro ke ad ogni fork lanciare un figlio....
giovessj è offline   Rispondi citando il messaggio o parte di esso
Old 07-07-2006, 16:31   #28
giovessj
Junior Member
 
Iscritto dal: Oct 2005
Messaggi: 20
quindi il ciclo while così fatto nn va bene??
giovessj è offline   Rispondi citando il messaggio o parte di esso
Old 07-07-2006, 16:36   #29
trallallero
Senior Member
 
L'Avatar di trallallero
 
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
no, penso di aver capito

tu devi creare 1 figlio con la fork.
La execvp ha una lista di argomenti e serve per trasformare il figlio
nel programma che vuoi tu.
Il primo argomento é infatti il nome del programma (per ex. ls)
poi gli argomenti per i programma (per ex. -ltr pippo ...)
l'ultimo argomento é NULL per far capire che é finita la lista.
Il figlio quindi si trasforma nel programma specificato e gli passa gli argomenti restanti.
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z Mb - Win Eight SP (1 > yours) 16 Valve
trallallero è offline   Rispondi citando il messaggio o parte di esso
Old 07-07-2006, 16:40   #30
giovessj
Junior Member
 
Iscritto dal: Oct 2005
Messaggi: 20
si xkè tipo puo' accadere ke cm riga di comando ci possa essere:
g++ -o shell.cpp e la mia shell cmq deve rilevare tt le parole presenti nela riga...
giovessj è offline   Rispondi citando il messaggio o parte di esso
Old 07-07-2006, 16:46   #31
trallallero
Senior Member
 
L'Avatar di trallallero
 
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
Quote:
Originariamente inviato da giovessj
si xkè tipo puo' accadere ke cm riga di comando ci possa essere:
g++ -o shell.cpp e la mia shell cmq deve rilevare tt le parole presenti nela riga...
Appunto, non é un figlio per parola ma un solo figlio che fa tutto.

Devi fare cosí:

- ottieni stringa (senza stop, non serve)
- crei vettore
- chiami la fork
- chiami la execvp passando il vettore terminato da NULL

io fra un pó devo andare. Ti posto il codice di un client
di un sistema client/server che ho fatto qualche anno fa.
Il sistema é lo stesso.
Il server si clona, chiama la execvp e si trasforma in child
passando gli argomenti.
Ovviamente io ho fatto anche child.c che gestisce il client
ma a te non serve perché chiami i comandi di sistema.
Spero ti torni utile, é molto commentato.

Codice:
/* -----------------------------------------*\
      AVVIA UN PROCESSO FIGLIO.
\* -----------------------------------------*/
static void ChildBorning( int ThisSocket )
{
   int      pid;

   if ( ThisSocket <= (stderr - stdin) ) return;

   pid = fork();   // SDOPPIA IL PROCESSO ATTUALE.

   if ( pid < 0 )       //  ERRORE
      DiagMsg(__LINE__ ,"'fork': %s" ,strerror(errno));
   else if ( pid > 0 )  //  PARENT
      DiagMsg(__LINE__ ,"Connection signal received from PPSERVER; child starting...");
   else                 //  CHILD
   {  // RILASCIA IL FILE_DESCRIPTOR DEL SOCKET DEL GENITORE.
      // --- SOSTITUISCE L'IMMAGINE DEL PROGRAMMA ATTUALE ---
      int   parm = 0;
      char  buff[16];
      char *arglist[7];

      // ID DELLA CODA_MESSAGGI PASSATO COME PARAMETRO AL PROGRAMMA CHE SUBENTRA AL CLONE DEL GENITORE.
      sprintf( buff, "%05.5d", ThisSocket );

      close(sockfd);
      // ACCATASTA I PARAMETRI PER IL PROGRAMMA 'CHILD'.
      arglist[parm++] = "child";                      // NOME PROCESSO
      arglist[parm++] = buff;                         // NUMERO CODA MESSAGGI
      if (Diagnostic) arglist[parm++]  = Diagnostic;  // EVENTUALE FLAG DI DIAGNOSTICA ( -d, -D )
      arglist[parm++] = NULL;                         // FINE ARGOMENTI


      // STAMPA IL COMANDO COMPLETO PER L'ESECUZIONE DI 'CHILD'.
      ArgListing( arglist, "Executed", "execvp" );
      execvp( arglist[0], arglist );

      // SE SIAMO QUI NON RIUSCITA 'exec'
      // STAMPA IL COMANDO COMPLETO PER L'ESECUZIONE  DI 'CHILD'.
      ArgListing(arglist ,"Failed"  ,"execvp");
   }
}
/* -----------------------------------------------------------------------------------*/
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z Mb - Win Eight SP (1 > yours) 16 Valve
trallallero è offline   Rispondi citando il messaggio o parte di esso
Old 07-07-2006, 16:49   #32
giovessj
Junior Member
 
Iscritto dal: Oct 2005
Messaggi: 20
Ok grazie mille x la tua disponibilità sei stato gentilissimo....
giovessj è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Qualcomm Snapdragon X2 Elite: l'architettura del SoC per i notebook del 2026 Qualcomm Snapdragon X2 Elite: l'architettura del...
Recensione DJI Mini 5 Pro: il drone C0 ultra-leggero con sensore da 1 pollice Recensione DJI Mini 5 Pro: il drone C0 ultra-leg...
ASUS Expertbook PM3: il notebook robusto per le aziende ASUS Expertbook PM3: il notebook robusto per le ...
Test ride con Gowow Ori: elettrico e off-road vanno incredibilmente d'accordo Test ride con Gowow Ori: elettrico e off-road va...
Recensione OnePlus 15: potenza da vendere e batteria enorme dentro un nuovo design   Recensione OnePlus 15: potenza da vendere e batt...
Anche l'ISRO ha rilasciato alcune inform...
La NASA mostra le nuove immagini della c...
Superati 13.300 MT/s per DDR5: ad ASUS e...
L’evoluzione dell’IA nelle imprese: la v...
Le storie in evidenza di Instagram torna...
Addio GeForce RTX 5060 e Radeon RX 9060?...
Arriva Hisense Déco TV S5Q, estet...
Aggiornata TOP500, la classifica degli H...
Noctua NH-D15 Chromax.black è rea...
NVIDIA aggiorna DGX Spark: nuovo kernel,...
Con Work IQ, Copilot per Microsoft 365 i...
Azure Cobalt 200: svelata la nuova CPU A...
Intel a tutto tondo: tra processi in ram...
AMD FSR Redstone arriverà ufficia...
L'Olanda 'cede' alla Cina: retromarcia t...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 23:38.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v