fbpx
Skip to main content

LINUX AVANZATO 2007

  • COM_EASYSOCIAL_GUEST_NAME
  • Avatar di COM_EASYSOCIAL_GUEST_NAME
  • Visitatori
  • Visitatori
18 Anni 2 Mesi fa #53309 da COM_EASYSOCIAL_GUEST_NAME
Risposta da COM_EASYSOCIAL_GUEST_NAME al topic LINUX AVANZATO 2007
Ecco la mia matrice ...
#include<stdio.h>
#include<stdlib.h>
#include<fcntl.h>
#include<sys/stat.h>

void crea_matrice(int R, int C) {
	int fd;
	fd = open("matrix",O_CREAT | O_TRUNC | O_WRONLY, 0777);
	if(fd == -1) {
		perror("unable to open the file\n");
		exit(0);
	}
	
	int i,j;
	unsigned int v;
	
	for(i=0; i<R; i++) {
		for(j=0; j<C; j++) {
			v = rand()%100;
			write(fd, &v, sizeof(v));
			printf("%u ",v);
		}
		printf("\n");
	}
	close(fd);
}

void leggi_matrice(char* name, int R, int C) {
	int fd;
	fd = open(name, O_RDONLY);
	if(fd == -1) {
		perror("unable to open the file\n");
		exit(0);
	}
	
	int i,j;
	unsigned int v;
	
	for(i=0; i<R; i++) {
		for(j=0; j<C; j++) {
			read(fd, &v, sizeof(v));
			printf("%u ",v);
		}
		printf("\n");
	}
	
	close(fd);
}

void trasponi(int R, int C) {
	int fd, fdt;
	fd = open("matrix",O_RDONLY);
	if(fd == -1) {
		perror("unable to open the file\n");
		exit(0);
	}
	
	fdt = open("matrix_trasp",O_CREAT | O_TRUNC | O_WRONLY, 0777);
	if(fdt == -1) {
		perror("[fdt] unable to open the file");
		exit(0);
	}
	
	int i,j;
	unsigned int v;
	
	for(i=0; i<R; i++) {
		for(j=0; j<C; j++) {
			read(fd,&v,sizeof(v));
			lseek(fdt,(i+2*j)*sizeof(unsigned int),SEEK_SET);
			write(fdt,&v,sizeof(v));
		}
	}
}

int main(int args, char* argv[]) {
	int R,C;
	
	if(args < 3) {
		printf("Usage: %s R C\n",argv[0]);
		exit(0);
	}
	
	R = atoi(argv[1]);
	C = atoi(argv[2]);
	printf("Creo ....\n");
	crea_matrice(R,C);
	printf("\nLeggo .... \n");
	leggi_matrice("matrix",R,C);
	printf("\nTraspongo .... \n");
	trasponi(R,C);
	leggi_matrice("matrix_trasp",C,R);
}

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

  • COM_EASYSOCIAL_GUEST_NAME
  • Avatar di COM_EASYSOCIAL_GUEST_NAME
  • Visitatori
  • Visitatori
18 Anni 2 Mesi fa #53314 da COM_EASYSOCIAL_GUEST_NAME
Risposta da COM_EASYSOCIAL_GUEST_NAME al topic LINUX AVANZATO 2007

Ecco la mia matrice ...
[...]
void trasponi(int R, int C) {
	[...]
	
	for(i=0; i<R; i++) {
		for(j=0; j<C; j++) {
			read(fd,&v,sizeof(v));
			lseek(fdt,(i+R*j)*sizeof(unsigned int),SEEK_SET); //mettere R al posto di 2
			write(fdt,&v,sizeof(v));
		}
	}
}
[...]

Mi sono accorto solo ora che l'algoritmo sopra non funziona con tutti gli R e C :D

Basta mettere R al posto del 2 (come scritto nel commento sopra)

PS: maledetto edit :evil:

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

Di più
18 Anni 2 Mesi fa #53347 da Elia GattaElia Gatta
Oggi ho fatto l'ultimo pezzo di questo maledetto esame...
Quello che posso dire io, ma non per spaventarvi sia chiaro, è solo una cronaca, a me è sembrato tutt'altro che tranquillo come orale. Cmq vi scrivo cosa mi ha chiesto se può esservi utile (cmq già prima dell'esame c'ha una lista con tutti i nomi degli iscritti e degli argomenti che gli vuole chiedere):

- Come si fa un disco di boot (lui vuole proprio sapere del bootloader free che si può scaricare) sia su dischetto che su CD con aggiunta di come funziona la fase di POST del BIOS - Sta domanda va bene, era facile ok... poi lui si mette a fare un discorso di 10 minuti su come il Bios riconosce se un CD è di boot o no... vabbè
- Page Cache, con particolare attenzione su come si possa evitare (flag O_DIRECT) e soprattutto su quella storia dell'allineamento, mi ha fatto proprio scrivere il codice C :? ... io un pò l'ho fatto, un pò m'ha aiutato lui... insomma ho zoppicato parecchio
- Linking (ma voleva sapere più quello che c'è scritto sul libro di Sistemi Operativi), 3 tipi di linking, statico, dinamico e un ultimo linking quello che si fa co la DLOPEN (mah!!!), e anche qui ho zoppicato parecchio

A questo punto sul foglio avevo letto che avevo una domanda generale sul VFS però lui ha detto "Non sta andando bene, se se la cava al calcolatore posso metterle un voto basso".
Mi chiede la radix_tree_lookup, io gliela dico proprio per sommi capi, lui chiede anche come funziona il radix tree. Poi mi chiede di sta funzione "Cosa c'è nel campo node->slot?" e io rispondo "non lo so"
Lui a quel punto dice "Ma perchè non studiate?" apre il portatile, prende la dispensa del radix tree e si accorge che non ne aveva parlato allora dice "Effettivamente non ne abbiamo parlato, se vuole le metto 20" e io firmo e me ne vado...

A me le domande non so sembrate facili, poi se lui vede che si zoppica su un argomento è li che intigna, certo poi ti ci porta alla soluzione, però ti fa proprio penare...
Vabbè in bocca al lupo a tutti!!!!
AUGH!

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

Di più
18 Anni 2 Mesi fa #53363 da Silvia Prosperi
Risposta da Silvia Prosperi al topic LINUX AVANZATO 2007
Qualcun'altro ha fatto oggi l'orale? Che vi ha chiesto? Che voleva sapere? Com'è andata? Su, non siate timidi!!!!

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

  • COM_EASYSOCIAL_GUEST_NAME
  • Avatar di COM_EASYSOCIAL_GUEST_NAME
  • Visitatori
  • Visitatori
18 Anni 2 Mesi fa #53392 da COM_EASYSOCIAL_GUEST_NAME
Risposta da COM_EASYSOCIAL_GUEST_NAME al topic LINUX AVANZATO 2007
Ciao!
Ecco le domande che ha fatto a me oggi a grandi linee:

1) parlare della struttura dati x gestire i file aperti da un processo (files_struct e i suoi campi...vettore fd che contiene 32 puntatori a oggetti di tipo FILE, etc)

2) se faccio una read come faccio a sapere quale pagine di quel file, che voglio leggere, ho già in Page Cache (da oggetto FILE vedi f_pos e ti calcoli l'index...poi dall'oggetto INODE che hai, perchè hai aperto un file con la open prima di fare read, raggiungi l'ADDRESS SPACE e poi scendi nel radix tree dalla radice con radix_tree_lookup)

3) codice relativo a una macro della sys_open: IS_ERR quella che restituisce o 0 se è tutto ok o il codice di errore se l'indirizzo non è valido

#define
MAX_ERRNO 4095
17
18 #ifndef __ASSEMBLY__

19
20 #define
IS_ERR_VALUE(x) unlikely((x) >= (unsigned long)-
MAX_ERRNO)
21

22 static inline void *ERR_PTR(long error)

23 {
24 return (void *) error;

25 }
26
27 static inline long
PTR_ERR(const void *ptr)
28 {
29 return (long) ptr;

30 }
31

32 static inline long IS_ERR(const void *ptr)
33 {

34 return IS_ERR_VALUE((unsigned long)ptr);
35 }



4) la struttura inode di ext2 (campo i_block e livelli di indirettezza)

5) se nella open viene fatto un controllo sui tipi del file (ad esempio in un path non possono esserci più di 6 link simbolici, questo per impedire di mandare il kernel in loop)...questa cosa l'avevo sentita dalle registrazioni delle lezioni, ma mi ha detto che cmq sulle dispense non c'era e non ero tenuto a saperla, quindi se ti fa domande che sulle dispense non ci sono non ti penalizza, secondo me le fa solo per vedere se può metterti un voto mediamente alto.

A me fortunatamente è andata bene,ma ad esempio un ragazzo prima di me l'ha bocciato non so esattamente per cosa...forse qualcosa sul codice C che stava commentando...

Comunque è sempre un caso il voto e le domande dell'esame...può chiedere di tutto...a me ad esempio, ad eccezione della prima domanda, non ha più guardato il foglio con le domande per farmi le altre, ma quello che gli veniva in mente mi chiedeva.

Oggi c'era anche un altro ragazzo che ha preso la lode e poi dopo di me non so com'è andato l'ultimo...sono andato via appena ho finito l'orale.

Ciao!

Alex

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

  • COM_EASYSOCIAL_GUEST_NAME
  • Avatar di COM_EASYSOCIAL_GUEST_NAME
  • Visitatori
  • Visitatori
18 Anni 2 Mesi fa #53393 da COM_EASYSOCIAL_GUEST_NAME
Risposta da COM_EASYSOCIAL_GUEST_NAME al topic LINUX AVANZATO 2007
Se a qualcuno può interessare (magari a chi come me ha avuto problemi ad usare i tags file) online ci sono siti in cui è possibile navigare attraverso dei link le varie funzioni del kernel tra cui la sys_open.
Ve ne posto uno, ma è della 2.6.20.1...io ho usato questo per studiare, anche se bisognava usare il 2.6.20 non credo che ci siano sostanziali differenze.

lxr.linux.no/search?v=2.6.20.1

Basta inserire il nome della funzione da cercare e poi navigare tramite i link delle funzioni.

Ciao!

Alex

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