Difference between revisions of "ProvaPratica 2012.07.17"
Jump to navigation
Jump to search
m (Aggiunta soluzione di un'altro studente e migliorata organizzazione pagina.) |
|||
(One intermediate revision by one other user not shown) | |||
Line 1: | Line 1: | ||
+ | ==Esercizio 1== | ||
+ | ===Soluzione di Alessandro=== | ||
<syntaxhighlight lang = "C"> | <syntaxhighlight lang = "C"> | ||
#include <stdio.h> | #include <stdio.h> | ||
Line 30: | Line 32: | ||
return 1; | return 1; | ||
}</syntaxhighlight> | }</syntaxhighlight> | ||
− | + | ||
− | + | ==Esercizio 2== | |
+ | ===Soluzione di Mrta=== | ||
<syntaxhighlight lang="C"> | <syntaxhighlight lang="C"> | ||
Line 74: | Line 77: | ||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
+ | ==Esercizio 3== | ||
+ | <source lang ="text"> | ||
+ | Esame 17 07 12 | ||
+ | |||
+ | Lo script o il programma Python deve fornire una lista dei file all'interno di un sottoalbero ordinati | ||
+ | secondo il la “profondita'” nell'albero (prima tutti quelli nella radice del sottoalbero, | ||
+ | poi tutti quelli al secondo livello), in ordine alfabetico fra quelli allo stesso livello. | ||
+ | </source> | ||
+ | ===Soluzione di Pierg=== | ||
+ | <source lang="python"> | ||
+ | import os, sys | ||
+ | |||
+ | pathname = sys.argv[1] | ||
+ | |||
+ | def tree (pathname): | ||
+ | for path, dirs, files in os.walk(pathname): | ||
+ | print dirs | ||
+ | files.sort() | ||
+ | level = path.replace(pathname, '').count(os.sep) | ||
+ | indent = ' ' * 4 * (level) | ||
+ | print('{}{}/'.format(indent, os.path.basename(path))) | ||
+ | subindent = ' ' * 4 * (level + 1) | ||
+ | for file in files: | ||
+ | print('{}{}'.format(subindent, file)) | ||
+ | |||
+ | tree(pathname) | ||
+ | </source> |
Latest revision as of 08:42, 9 May 2017
Esercizio 1
Soluzione di Alessandro
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#define BUF_SIZE 20
int main(int argc, char** argv){
int ncopie, i, ris;
char command[BUF_SIZE];
if (argc<3) {printf("inserisci due o più argomenti (ncopie, command)\n"); exit(1);}
ncopie = atoi(argv[1]);
strcpy(command, argv[2]);
for (i = 0; i<ncopie; i++){
if(fork()){//processo padre
}
else {
char *env_el;
env_el = malloc(BUF_SIZE);
sprintf(env_el, "NCOPIA=%d", i);
//asprintf
//devo aggiungerci in fondo lo zero terminatore
char *newenviron[] = {env_el, (char*) 0};
//argv+2 sono gli argomenti, ovvero tutti gli argomenti passati dopo il secondo
ris = execve(argv[2], argv+2, newenviron);
if (ris == -1) {perror("execve"); exit(1);}
}
}
for (i = 0; i<ncopie; i++) wait(NULL);
return 1;
}
Esercizio 2
Soluzione di Mrta
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <fcntl.h>
#define BUF_SIZE 20
int main(int argc, char** argv){
int ncopie, i, ris;
char command[BUF_SIZE];
if (argc<3) {printf("inserisci due argomenti (ncopie, command)\n"); exit(1);}
ncopie = atoi(argv[1]);
int fd[ncopie];
pid_t pid[ncopie];
for (i = 0; i<ncopie; i++){
char *tmpfile;
asprintf(&tmpfile,"/tmp/ncopie.%d.%d",getpid(),i);
fd[i]=open(tmpfile,O_CREAT|O_RDWR,0600);
unlink(tmpfile);
if((pid[i]=fork())==0){//processo padre
char *NCOPIA;
asprintf(&NCOPIA, "NCOPIA=%d", i);
char *newenviron[] = { NCOPIA, (void *)0};
dup2(fd[i],STDOUT_FILENO);
ris = execve(argv[2], argv+2, newenviron);
if (ris == -1) {perror("execve"); exit(1);}
}
}
for (i = 0; i<ncopie; i++) {
waitpid(pid[i],NULL,0);
lseek(fd[i],SEEK_SET,0);
char *buf[1024];
int n;
while ((n=read(fd[i],buf,1024))>0)
write(STDOUT_FILENO,buf,n);
}
return 1;
}
Esercizio 3
Esame 17 07 12
Lo script o il programma Python deve fornire una lista dei file all'interno di un sottoalbero ordinati
secondo il la “profondita'” nell'albero (prima tutti quelli nella radice del sottoalbero,
poi tutti quelli al secondo livello), in ordine alfabetico fra quelli allo stesso livello.
Soluzione di Pierg
import os, sys
pathname = sys.argv[1]
def tree (pathname):
for path, dirs, files in os.walk(pathname):
print dirs
files.sort()
level = path.replace(pathname, '').count(os.sep)
indent = ' ' * 4 * (level)
print('{}{}/'.format(indent, os.path.basename(path)))
subindent = ' ' * 4 * (level + 1)
for file in files:
print('{}{}'.format(subindent, file))
tree(pathname)