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 #53981 da COM_EASYSOCIAL_GUEST_NAME
Risposta da COM_EASYSOCIAL_GUEST_NAME al topic LINUX AVANZATO 2007

Ad una prima lettura sembrava complicato, ma forse non lo è poi tantissimo.

Qui intendi permutazione di N bytes?

"Il programma costruisce avvalendosi della funzione rand() una pemutazione di N e la salva in una opportuna struttura di dati."


Permutazione di N = permutazione degli N numeri tra 0 e N-1.
No, il testo, su questo, non era chiaro...


Opportuna struttura dati???che significa???

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 #53986 da COM_EASYSOCIAL_GUEST_NAME
Risposta da COM_EASYSOCIAL_GUEST_NAME al topic LINUX AVANZATO 2007
Un array :lol: :lol:

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

Di più
18 Anni 2 Mesi fa #53988 da Lavinia Laurenti
Risposta da Lavinia Laurenti al topic LINUX AVANZATO 2007
ecco le domande del mio orale :

- software timer ( lezione 9)
- sys open (descrizione al calcolatore di tutte le funzioni che chiama)
- VFS
- oggetto dentry, con relativi campi e metodi ( ho descritto anche la dentry cache, funzione d_hash,etc...)
- profiling

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 #53989 da COM_EASYSOCIAL_GUEST_NAME
Risposta da COM_EASYSOCIAL_GUEST_NAME al topic LINUX AVANZATO 2007
Alla fine ieri sera mi ci sono messo e ho provato a farlo. Pare funzionare correttamente.
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <string.h>

int main(int argc, char **argv){
	
	char *filename = argv[1];
	int N = atoi(argv[2]);
	int i;
	
	//genero permutazione casuale di numeri compresi tra 0 e N - 1
	int permutazione[N];
	
	srand(time(NULL));
	int perm = rand() % N;
	permutazione[0] = perm;
	
	for(i = 1; i < N; i++){
		while(1){
			perm = rand() % N;
			int j;
			for(j = 0; j < i; j++){
				if(perm != permutazione[j])
					continue;
				else break;
			}
			if(j == i){
				permutazione[i] = perm;
				break;
			}
		}
	}
	
	for(i = 0; i < N; i++)
		printf("%d\n", permutazione[i]);
	
	//apro i files
	char *filename2;
	strcpy(filename2, filename);
 	int fd = open(filename, O_RDONLY);
	if(fd < 0)
		printf("Errore nell'apertura del file %s!!\n", filename);
	char *suffix = "_crypt";
	strcat(filename, suffix);
	int fd1 = open(filename, O_CREAT|O_RDWR);
	if(fd1 < 0)
		printf("Errore nell'apertura del file %s!!\n", filename);
	suffix = "_decrypt";
	strcat(filename2, suffix);
	int fd2 = open(filename2, O_CREAT|O_WRONLY);
	if(fd2 < 0)
		printf("Errore nell'apertura del file %s!!\n", filename2);
	
	//cripto
	int nread;
	char buf[N];
	while((nread = read(fd, buf, N)) == N){
		for(i = 0; i < N; i++){
			int num = permutazione[i];
			write(fd1, &buf[num], 1);
		}
	}
	
	//decripto
	lseek(fd1, 0, SEEK_SET);
	while((nread = read(fd1, buf, N)) == N){
		for(i = 0; i < N; i++){
			int num = permutazione[i];
			write(fd2, &buf[num], 1);
		}
	}
	
	close(fd);
	close(fd1);
	close(fd2);
	
	return 0;
}

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 #53990 da COM_EASYSOCIAL_GUEST_NAME
Risposta da COM_EASYSOCIAL_GUEST_NAME al topic LINUX AVANZATO 2007
A prima vista questo tuo codice mi sembra che funzioni solo nel caso in cui il file sia di dimensione N e non multiplo di N (come richiesto da testo)!!

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 #53993 da COM_EASYSOCIAL_GUEST_NAME
Risposta da COM_EASYSOCIAL_GUEST_NAME al topic LINUX AVANZATO 2007
Ho provato con N = 4 e il file da 8 bytes, funzionava :)

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