fbpx
Skip to main content

[LA] Linux avanzato 2008

  • COM_EASYSOCIAL_GUEST_NAME
  • Avatar di COM_EASYSOCIAL_GUEST_NAME
  • Visitatori
  • Visitatori
17 Anni 2 Mesi fa #80786 da COM_EASYSOCIAL_GUEST_NAME
Risposta da COM_EASYSOCIAL_GUEST_NAME al topic [LA] Linux avanzato 2008

Non ci posso credere!
Sono Idoneo.
Alla fine non sono poi così pignoli nelle correzioni... io ho fatto la 3) perfetta anche se un po' fantasiosa, la 5) perfetta e la 4) con un paio di imprecisioni (tipo la distrazione di usare tutti char invece di unsigned char), e sono stato promosso.
Io mi sarei bocciato, ma sono contento che il prof non l'abbia fatto.

Per quanto riguarda l'estrapolazione dei numeri ho usato anch'io lo stesso metodo di Smoking_Man, anche se invece di shiftare di 4 ho diviso per 16 ma è la stessa cosa.

Agli altri come è andata?
Mi sembrava fattibile anche se ci ho messo 40 minuti solo per capire come gestire le stringhe BCD.


Scusa la curiosità, ma la risposta alla domanda 5, quella sulla differenza fra FIFO e pipe quando e dove l'hai studiata?


guarda penso che andasse bene anche scrivergli, come sta scritto sulla dispensa di sistemi operativi, che alla fin fine sono la stessa cosa e sono uno dei tipi di file di Unix. Almeno io ho risposto cosi'...

Riguardo la prova al terminale, qualcuno sa qualcosa di eventuali vincoli su quando farla? Inoltre, per chi l'ha già fatta, mi confermate che i pc del laboratorio hanno ubuntu e le man pages sono aggiornate? Oppure tocca impararsi a memoria tutti i flag possibili e immaginabili delle varie chiamate di sistema?
grazie 1000 ciao!

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • COM_EASYSOCIAL_GUEST_NAME
  • Avatar di COM_EASYSOCIAL_GUEST_NAME
  • Visitatori
  • Visitatori
17 Anni 2 Mesi fa #80814 da COM_EASYSOCIAL_GUEST_NAME
Risposta da COM_EASYSOCIAL_GUEST_NAME al topic [LA] Linux avanzato 2008


Scusa la curiosità, ma la risposta alla domanda 5, quella sulla differenza fra FIFO e pipe quando e dove l'hai studiata?


Sinceramente non me lo ricordo. So che l'ho letta qualche giorno prima della prova... forse su GAPIL ma non ci giurerei.
Comunque sembra che bastasse scrivere quelle due righe che stanno sulle dispense di sistemi operativi.

Si prega Accedi o Crea un account a partecipare alla conversazione.

Di più
17 Anni 2 Mesi fa #80831 da Michela Ricelli


Scusa la curiosità, ma la risposta alla domanda 5, quella sulla differenza fra FIFO e pipe quando e dove l'hai studiata?


Sinceramente non me lo ricordo. So che l'ho letta qualche giorno prima della prova... forse su GAPIL ma non ci giurerei.
Comunque sembra che bastasse scrivere quelle due righe che stanno sulle dispense di sistemi operativi.


ah ok...anch'io ricordavo la riga delle dispense di sistemi operativi...perche invece su "Understanding Linux Kernel" la differenza è spiegata...ma spero che andasse bene anche la prima soluzione altrimenti significa che fra i prerequisiti sono entrate anche le 1000 pagine dell' "ULK"

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • COM_EASYSOCIAL_GUEST_NAME
  • Avatar di COM_EASYSOCIAL_GUEST_NAME
  • Visitatori
  • Visitatori
17 Anni 2 Mesi fa #80929 da COM_EASYSOCIAL_GUEST_NAME
Risposta da COM_EASYSOCIAL_GUEST_NAME al topic [LA] Linux avanzato 2008
Beh come è andata sta prova al calcolatore?

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • COM_EASYSOCIAL_GUEST_NAME
  • Avatar di COM_EASYSOCIAL_GUEST_NAME
  • Visitatori
  • Visitatori
17 Anni 2 Mesi fa #80954 da COM_EASYSOCIAL_GUEST_NAME
Risposta da COM_EASYSOCIAL_GUEST_NAME al topic [LA] Linux avanzato 2008
Prova:

Passare da riga di comando il path di una directory presente e il nome di una directory che deve essere creata.
Il programma legge i file presenti nella prima directory e sposta nella seconda dir i files regolari e con permesso d'esecuzione.

Attenti a come copiate i files che si incazza :)
Non so quanti l'hanno passato ma non penso molti. Il compilatore certe volte si impalla e da errori incomprensibili basta enter e un risalvataggio per aggiustare tutto.

A Bovet e mettila na versione de Ubuntu decente...

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • COM_EASYSOCIAL_GUEST_NAME
  • Avatar di COM_EASYSOCIAL_GUEST_NAME
  • Visitatori
  • Visitatori
17 Anni 2 Mesi fa #80970 da COM_EASYSOCIAL_GUEST_NAME
Risposta da COM_EASYSOCIAL_GUEST_NAME al topic [LA] Linux avanzato 2008

Prova:

Passare da riga di comando il path di una directory presente e il nome di una directory che deve essere creata.
Il programma legge i file presenti nella prima directory e sposta nella seconda dir i files regolari e con permesso d'esecuzione.

Attenti a come copiate i files che si incazza :)
Non so quanti l'hanno passato ma non penso molti. Il compilatore certe volte si impalla e da errori incomprensibili basta enter e un risalvataggio per aggiustare tutto.

A Bovet e mettila na versione de Ubuntu decente...



che ne dite di questa mia versione? Ci ho messo un'oretta spulciando il man delle varie funzioni.. Sarebbe piaciuta al prof secondo voi?;)
Ma le MAN PAGES sui pc del laboratorio sono aggiornate/presenti?
grazie ciao
/*
* Passare da riga di comando il path di una directory presente e il nome di una directory che deve essere creata.
* Il programma legge i file presenti nella prima directory e sposta nella seconda dir i files regolari e con permesso d'esecuzione.
*/

#include <sys/stat.h>
#include <sys/types.h>
#include <dirent.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main (int argc, char *argv[])
{
	if (argc!=3)
	{
		printf("USAGE: programname source destination\n");
		return 1;
	}

	DIR *srcPtr;
	
	if (mkdir(argv[2],0777)<0)
	{
		printf("Unable to create directory %s (probably it already exists)\n",argv[2]);
	}
	srcPtr=opendir(argv[1]);
	if (srcPtr==NULL)
	{
		printf("BAD OPENDIR %s\n",argv[1]);
		return 1;
	}
	
	struct dirent *dirPtr;
	struct stat statbuff;
	int fdSrc,fdDest;
	char *path_copia;
	unsigned int len_path_copia;
	unsigned char c;

	chdir(argv[1]);
	while ((dirPtr=readdir(srcPtr))!=NULL)
	{
		if (lstat(dirPtr->d_name,&statbuff)<0)
		{
			printf("BAD LSTAT\n");
			return 1;
		}
		if (S_ISREG(statbuff.st_mode) && 
		   (statbuff.st_mode & S_IXUSR )) //se È UN FILE REGOLARE E IL PROPRIETARIO HA PERMESSI D'ESECUZIONE
		{
			//Copia in destinazione (NOTA: Si suppone che i path di destinazione vengano passati col / finale)
			len_path_copia=strlen(argv[2]);
			len_path_copia+=1+strlen(dirPtr->d_name);
			path_copia=(char *)malloc(len_path_copia*sizeof(char));
			
			strcpy(path_copia,argv[2]);
			strcat(path_copia,dirPtr->d_name);
			printf("Copying %s in %s\n",dirPtr->d_name,path_copia);
			if ( (fdDest=open(path_copia,O_CREAT|O_TRUNC|O_WRONLY,(statbuff.st_mode &S_IRWXU)|(statbuff.st_mode &S_IRWXG)|(statbuff.st_mode &S_IRWXO) ) ) <0 )
			{
				printf("BAD OPEN %s\n",path_copia);
				return 1;
			}
			if ( (fdSrc=open(dirPtr->d_name,O_RDONLY))<0 )
			{
				printf("BAD OPEN %s\n",dirPtr->d_name);
				return 1;
			}
			while (read(fdSrc,&c,1)==1)
			{
				write(fdDest,&c,1);
			}
			close(fdSrc);
			close(fdDest);
			free(path_copia);
		}
		
	}
	chdir("..");
	closedir (srcPtr);
	return 0;
}

Si prega Accedi o Crea un account a partecipare alla conversazione.