Modulo 2 Flashcards

(136 cards)

1
Q
  1. Quale delle seguenti affermazioni sui processi Linux è falsa?
    > In un determinato istante, non possono esserci 2 processi distinti con lo stesso PID
    > Per creare i PID dei processi si usano dei numeri interi che crescono sempre
    > In istanti diversi, possono esserci 2 processi distinti con lo stesso PID
    > Ogni processo può conoscere il suo PID
A

Per creare i PID dei processi si usano dei numeri interi che crescono sempre

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q
  1. Quale delle seguenti affermazioni sugli errori delle syscall è vera?

> Per stampare su stdout la spiegazione di un errore verificatosi in una syscall si può effettuare la seguente chiamata: printf(“%s\n”, strerror(errno));
Per stampare su stdout la spiegazione di un errore verificatosi in una syscall è sufficiente chiamare perror
Per stampare su stdout la spiegazione di un errore verificatosi in una syscall è necessario scrivere uno switch sulla variabile globale errno
Per stampare su stderr la spiegazione di un errore verificatosi in una syscall, il cui nome sia contenuto nella variabile syscall_name (di tipo char *), si può effettuare la seguente chiamata: perror(“Si e’ verificato il seguente errore nella chiamata a %s”, syscall_name);

A

> Per stampare su stdout la spiegazione di un errore verificatosi in una syscall si può effettuare la seguente chiamata: printf(“%s\n”, strerror(errno));

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q
  1. Quale delle seguenti affermazioni sui processi Linux è vera?

> Normalmente, il processo figlio, una volta terminata la sua computazione, attende, con una chiamata alla syscall wait, che il padre termini e gli restituisca il suo exit status
Un processo diventa zombie se termina prima di almeno uno dei processi che abbia eventualmente creato
Ogni processo può conoscere il proprio PID, ma non quello del processo che l’ha creato
Con l’eccezione del primo processo, tutti i processi sono creati con una fork effettuata da un altro processo in esecuzione

A

> Con l’eccezione del primo processo, tutti i processi sono creati con una fork effettuata da un altro processo in esecuzione

Spiegazioni:
[generalmente il padre aspetta mediante la funzione wait
che il figlio finisca ed ottiene le varie informazioni sull’exit
status]
[un processo diventa zombie se il padre termina prima del figlio senza effettuare una wait]
[ogni processo conosce il ppid]

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q
  1. Quale delle seguenti affermazioni sui processi Linux è falsa?

> Digitare un comando sulla shell genera sempre un nuovo processo
Esistono file che non possono essere eseguiti per diventare processi
Affinchè un file possa diventare un processo è necessario che abbia i permessi di esecuzione
Qualsiasi computazione eseguita dal sistema operativo è contenuta dentro un qualche processo

A

> Digitare un comando sulla shell genera sempre un nuovo processo

[molti comandi come ad esmpio cd non generano nuovi processi ma sono dei semplici cambi di variabile all’interno dello stesso processo]

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q
  1. Quale delle seguenti affermazioni sui processi Linux è vera?

> Eseguendo (con successo) k volte un file eseguibile, si generano k diversi processi
Per poter lanciare un file eseguibile, è prima necessario aspettare che il comando precedente sia terminato
Tutti i processi sono sempre in stato di RUNNING
Un processo è sempre un’istanza di uno script bash

A

> Eseguendo (con successo) k volte un file eseguibile, si generano k diversi processi

[si possono lanciare comandi in backgorund]
[possono stare anche in altri stati]

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q
  1. Un programma scritto in linguaggio C:

> Rappresenta le stringhe ESCLUSIVAMENTE come array di caratteri terminate dal carattere ‘\n’
Rappresenta le stringhe ESCLUSIVAMENTE come array di caratteri terminate dal carattere ‘^M’
Rappresenta le stringhe ESCLUSIVAMENTE come array di caratteri terminate dal carattere ‘0’
Rappresenta le stringhe come array di caratteri terminate dal carattere ‘\0’

A

Rappresenta le stringhe come array di caratteri terminate dal carattere ‘\0’

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q
  1. Quale delle seguenti affermazioni è vera?

> Linus Torvalds ha riscritto i pacchetti di Unix, creando i pacchetti GNU
Tutte le opzioni sono false
Linus Torvalds ha scritto il primo kernel di Linux all’inizio degli anni ‘80
Richard Stallman ha descritto per primo la licenza GPL

A

Richard Stallman ha descritto per primo la licenza GPL

[ Linus Torvalds programma il kernel del primo Linux nel 1991]

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q
  1. Quale delle seguenti affermazioni è vera?

> Nessuna delle opzioni è vera
È possibile montare un filesystem solo se è dichiarato nel file /etc/fstab
È possibile montare un filesystem solo se è dichiarato nel file /etc/mtab
Ad ogni filesystem corrisponde un disco fisico o parte di esso(partizione)

A

Nessuna delle opzioni è vera

[/etc/fstab contiene i filesystem che vengono montati a tempo di boot]
[/etc/mtabm contiene i filesystem che sono montati e dove]
[i filesystem virtuali non corrispondono ad alcun disco]

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q
  1. Quale delle seguenti affermazioni sulla comunicazione tra processi in Linux è vera?

> Per far comunicare qualunque coppia di processi è necessario metterli in pipeling da shell
Usando la syscall pipe, è possibile far comunicare qualunque coppia di processi
Nessuna delle opzioni è vera
Usando le named pipes, è possibile far comunicare solo processi parenti(ad es., padre con figlio)

A

Nessuna delle opzioni è vera

[possono comunicare anche tramite file,segnali,con le socket..]
[syscal pipe è limitato a processi padri e figli]
[named pipes è limitato a processi padri,figli,nipoti]

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q
  1. Quale delle seguenti affermazioni sulla comunicazione tra processi in Linux è vera?

Per far comunicare qualunque coppia di processi è necessario metterli in pipeling da shell

Usando la syscall pipe, è possibile far comunicare qualunque coppia di processi

Usando le socket si può far comunicare qualsiasi coppia di processi

Usando le named pipes, è possibile far comunicare solo processi parenti(ad es., padre con figlio)

A

Usando le socket si può far comunicare qualsiasi coppia di processi

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q
  1. Si supponga di avere il seguente frammento di codice: FILE *stream = fopen(NOMEFILE, “w”); Dire quale frammento di codice ha lo stesso effetto.

int fd = open(NOMEFILE, O_WRONLY | O_CREAT, 0666);
int fd = open(NOMEFILE, O_WRONLY | O_TRUNC);
int fd = open(NOMEFILE, O_WRONLY);
int fd = open(NOMEFILE, O_WRONLY | O_CREAT | O_TRUNC, 0666);

A

int fd = open(NOMEFILE, O_WRONLY | O_CREAT | O_TRUNC, 0666);

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q
  1. Quale delle seguenti affermazioni sulle syscall di Linux che riguardano i files è falsa?

> Chiamando la syscall select, è possibile monitorare un insieme di file descriptor, ed essere notificati non appena ce n’è uno che è diventato disponibile per un’operazione di lettura o scrittura
Per richiedere un lock su un file (o su una porzione di esso), occorre chiamare la syscall ioctl
È possibile usare la syscall select sia in modo bloccante che in modo non bloccante
Le syscall ioctl e fcntl ammettono 2 o 3 argomenti, a seconda dell’operazione richiesta

A

Per richiedere un lock su un file (o su una porzione di esso), occorre chiamare la syscall ioctl

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q
  1. Quale delle seguenti affermazioni sui segnali Linux è vera?

> Tutti i segnali, se non opportunamente catturati, provocano la terminazione del processo, con l’eccezione del segnale STOP
Per un processo è sempre possibile ridefinire il comportamento di un qualsiasi segnale
È possibile per un qualunque processo inviare un segnale ad un qualsiasi altro processo dello stesso utente
Nessuna delle altre affermazioni è vera

A

È possibile per un qualunque processo inviare un segnale ad un qualsiasi altro processo dello stesso utente

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q
  1. Quale delle seguenti affermazioni sui segnali Linux è vera?

> Tutti i segnali, se non opportunamente catturati, provocano la terminazione del processo, con l’eccezione del segnale STOP
Per un processo è sempre possibile ridefinire il comportamento di un qualsiasi segnale
È possibile per un qualunque processo inviare un segnale ad un qualsiasi altro processo dello stesso utente
Nessuna delle altre affermazioni è vera

A

È possibile per un qualunque processo inviare un segnale ad un qualsiasi altro processo dello stesso utente

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q
  1. Quale delle seguenti affermazioni sugli errori delle syscall di Linux è vera?

> Per stampare su stderr la spiegazione di un errore verificatosi in una syscall, il cui nome sia contenuto nella variabile syscall_name (di tipo char *), si può effettuare la seguente chiamata: perror(“Si è verificato il seguente errore nella chiamata a %s”, syscall_name);
Per stampare su stdout la spiegazione di un errore verificatosi in una syscall si può effettuare la seguente chiamata: prinf(“%s\n”, strerror(errno));
Per stampare su stdout la spiegazione di un errore verificatosi in una syscall è sufficiente chiamare perror
Per stampare su stdout la spiegazione di un errore verificatosi in una syscall è necessario scrivere uno switch sulla variabile globale errno

A

Per stampare su stdout la spiegazione di un errore verificatosi in una syscall si può effettuare la seguente chiamata: prinf(“%s\n”, strerror(errno))

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q
  1. La stringa Informatica9000 ha un match con la seguente REGEX:

Informatica9000$
^Informatica900$
Informatica9[0^3]
[^IKU]nformatica

A

Informatica9000$

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
17
Q
  1. Quali delle seguenti affermazioni sui comandi della bash è vera?

> Il comando cat stringa può essere usato per scrivere una stringa su stdout
Eseguendo il comando echo date viene stampata la data e l’ora corrente (secondo l’orologio di sistema)
Il comando man cmd restituisce in sequenza tutte le pagine di manuale per il comando cmd contenute nelle varie sezioni del manuale
Il comando clear può essere usato per pulire completamente lo schermo: dopo l’esecuzione, il terminale non conterrà alcuna scritta

A

Eseguendo il comando echo date viene stampata la data e l’ora corrente (secondo l’orologio di sistema)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
18
Q
  1. Relativamente alla programmazione bash, la variabile IFS:

> Nessuna delle opzioni è vera
È l’acronimo di Internal Field Splitting
Rappresenta una variabile contenente la sequenza di tutti i caratteri utilizzati per la separazione in parole (word splitting)
Rappresenta il carattere utilizzato per la separazione in parole (word splitting)

A

Rappresenta una variabile contenente la sequenza di tutti i caratteri utilizzati per la separazione in parole (word splitting)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
19
Q
  1. Quale delle seguenti affermazioni sul Linguaggio C è vera?

Richiede che i programmi siano sempre scritti in file con estensione .c
Richiede che ogni modulo sia scritto in un file separato, come nel Java
È stato definito come linguaggio Open Source da Dennis Ritchie
È stato definito presso i laboratori di ricerca di una compagnia telefonica americana

A

È stato definito presso i laboratori di ricerca di una compagnia telefonica americana

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
20
Q
  1. Quale delle seguenti affermazioni sulle funzioni malloc, calloc, realloc e free è falsa?

> Le due chiamate calloc(N, sizeof(int)) e realloc(NULL, Nsizeof(int)) hanno sempre lo stesso effetto
Le due chiamate malloc(N
sizeof(int)) e realloc(NULL, N*sizeof(int)) hanno sempre lo stesso effetto
Il primo argomento di realloc, quando non NULL, deve contenere il risultato di una precedente chiamata a malloc, calloc o realloc
I risultati di malloc, calloc e realloc possono essere passati alla funzione free per poter essere riallocati da future malloc, calloc e/o realloc

A

Le due chiamate calloc(N, sizeof(int)) e realloc(NULL, N*sizeof(int)) hanno sempre lo stesso effetto

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
21
Q
  1. Quale delle seguenti affermazioni sulle funzioni malloc, calloc, realloc e free è falsa?

> I risultati di malloc e calloc possono essere passati alla funzione free per poter essere riallocati da future malloc e/o calloc
Le due chiamate malloc(N*sizeof(int)) e calloc(N, sizeof(int)) hanno sempre lo stesso effetto
La memoria allocata con malloc e/o calloc viene comunque liberata quando il processo termina, indipendentemente dal fatto di aver o no chiamato la free su ogni zona di memoria allocata
La memoria allocata da malloc e/o calloc si trova sullo heap

A

Le due chiamate malloc(N*sizeof(int)) e calloc(N, sizeof(int)) hanno sempre lo stesso effetto

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
22
Q
  1. Quale dei seguenti sistemi operativi non è un antenato di Linux?

Unix
Le altre risposte contengono tutte degli antenati di Linux
MacOSX
MULTICS

A

MacOSX

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
23
Q
  1. Si consideri il comando: find Doc* ( -name ‘Doc*’ -a -type d ) -o -newer Documenti -exec touch ‘{}’ \;

> Nessuna delle altre opzioni è vera
L’azione non è specificata correttamente, quindi la bash restituirà un messaggio d’errore
Il comando stampa su schermo tutte le directory il cui nome comincia con Doc e che siano state modificate più recentemente della directory Documenti
Il comando modifica tutti i tempi(atime, mtime e ctime) di tutte le directory il cui nome comincia con Doc e che siano state modificate più recentemente dalla directory Documenti

A

Nessuna delle altre opzioni è vera

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
24
Q
  1. Quale delle seguenti affermazioni sulla syscall fork è falsa?

> Ritorna 2 valori diversi a seconda che si tratti del processo padre o del processo figlio
Genera una copia esatta del processo chiamante, con alcune eccezioni; tra queste ultime vi è lo stack delle chiamate (che quindi non è copiato)
Genera una copia esatta del processo chiamante, con alcune eccezioni; tra queste ultime vi è il PID (che quindi non è copiato)
Genera una copia esatta del processo chiamante, con alcune eccezioni; tra queste ultime vi è il PPID (che quindi non è copiato)

A

Genera una copia esatta del processo chiamante, con alcune eccezioni; tra queste ultime vi è lo stack delle chiamate (che quindi non è copiato)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
25
24. Quale delle seguenti affermazioni sui comando cmp, diff e patch è vera? > L’opzione -b ha lo stesso significato sia per diff che per cmp > È possibile usare il comando patch solo se si ha l’output del comando diff > È possibile usare il comando patch solo se si ha, indifferentemente, l’output del comando diff o del comando cmp > L’opzione -i di cmp permette di considerare come uguali le differenze sul solo minuscolo/maiuscolo
È possibile usare il comando patch solo se si ha l’output del comando diff
26
25. Si supponga di voler avere in esecuzione in background i comando cmd1 e cmd2 (si supponga anche che tali comandi non terminino, a meno che non gli si mandi un opportuno segnale). Quale dei seguenti modi è corretto? cmd1 #premere Ctrl+C bg cmd2 #premere Ctrl+C bg cmd1 #premere Ctrl+Z cmd2 #premere Ctrl+Z fg cmd1 #premere Ctrl+Z cmd2 bg #premere Ctrl+Z bg cmd1 #premere Ctrl+Z cmd2 #premere Ctrl+Z bg bg
cmd1 #premere Ctrl+Z cmd2 #premere Ctrl+Z bg bg
27
26. Si supponga di voler avere in esecuzione in background i comando cmd1 e cmd2. Quale dei seguenti modi è corretto? cmd1 #premere Ctrl+Z bg cmd2 #premere Ctrl+Z bg cmd1 #premere Ctrl+Z fg cmd2 #premere Ctrl+Z fg cmd1 #premere Ctrl+Z bg cmd2 #premere Ctrl+Z cmd1 #premere Ctrl+Z cmd2 #premere Ctrl+Z fg
cmd1 #premere Ctrl+Z bg cmd2 #premere Ctrl+Z bg
28
27. Quale delle seguenti affermazioni sulle syscall di Linux che riguardano i files è falsa? > La syscall link(oldpath, newpath) ha lo stesso effetto del comando bash ln oldpath newpath > La syscall unlink(nomefile) ha lo stesso effetto del comando bash rm nomefile > La syscall unlink(nomefile) rimuove sempre il contenuto di nomefile dal disco, se nomefile è un file regolare > La syscall symlink(oldpath, newpath) ha lo stesso effetto del comando bash ln -s oldpath newpath
La syscall unlink(nomefile) rimuove sempre il contenuto di nomefile dal disco, se nomefile è un file regolare
29
8. Quale delle seguenti affermazioni sui processi Linux è vera? Nessuna delle altre opzioni è vera Ciascun job è composto al massimo da un processo Per vedere i jobs in foreground, è sufficiente usare il comando jobs Quando un processo in foreground termina, la bash stampa il job id del processo e la ragione della terminazione
Nessuna delle altre opzioni è vera
30
29. Quale delle seguenti affermazioni sulla syscall sigaction è vera? > Nessuna delle altre opzioni è vera > Permette di definire una funzione che viene eseguita qualsiasi segnale arrivi al processo > Chiamandola ripetutamente, e passandole al primo argomento via via tutti i segnali disponibili, è possibile definire una funzione che viene eseguita qualsiasi segnale arrivi al processo > Permette di definire quali segnali vanno ignorati finché l’handler del segnale è in esecuzione
Nessuna delle altre opzioni è vera
31
29. Quale delle seguenti affermazioni sulla syscall sigaction è vera? > Nessuna delle altre opzioni è vera > Permette di definire una funzione che viene eseguita qualsiasi segnale arrivi al processo > Chiamandola ripetutamente, e passandole al primo argomento via via tutti i segnali disponibili, è possibile definire una funzione che viene eseguita qualsiasi segnale arrivi al processo > Permette di definire quali segnali vanno ignorati finché l’handler del segnale è in esecuzione
Nessuna delle altre opzioni è vera
32
30. Quale delle seguenti affermazioni sulla syscall sigaction è vera? > Nessuna delle altre opzioni è vera > Permette di definire una funzione che viene eseguita qualsiasi segnale arrivi al processo > Chiamandola ripetutamente, e passandole al primo argomento via via tutti i segnali disponibili, è possibile definire una funzione che viene eseguita qualsiasi segnale arrivi al processo > Permette tramite il campo sa_mask della struttura struct sigaction, di definire quali segnali vanno ignorati finché l’handler del segnale è in esecuzione
Nessuna delle altre opzioni è vera
33
31. Si supponga di voler lanciare in background i comandi cmd1 e cmd2. Quale dei seguenti modi è corretto? Nessuna delle altre opzioni è corretta cmd1 & cmd2 ( cmd1; cmd2 ) & cmd1; cmd2 &
Nessuna delle altre opzioni è corretta
34
32. Si supponga di voler lanciare in background i comandi cmd1 e cmd2 (si supponga anche che tali comandi non terminino, a meno che non gli si mandi un opportuno segnale). Quale dei seguenti modi è corretto? cmd1; cmd2 & cmd1 && cmd2 cmd1 & cmd2 Nessuna delle altre opzioni è corretta
Nessuna delle altre opzioni è corretta
35
33. Si supponga di voler lanciare in background i comandi cmd1 e cmd2. Quale dei seguenti modi è corretto? Nessuna delle altre opzioni è corretta cmd1 & cmd2 & ( cmd1; cmd2 ) & cmd1; cmd2 &
cmd1 & cmd2 &
36
34. Quale delle seguenti affermazioni sul comando time è falsa? > Il comando /usr/bin/time cmd ha anche l’effetto di eseguire il comando cmd > Il comando /usr/bin/time cmd può solo mostrare il tempo (di CPU, di sistema e reale) > Esistono 2 comandi time: uno è una keyword della bash e l’latro corrisponde ad un file eseguibile (solitamente /usr/bin/time) > Il comando time cmd, eseguito dalla bash, può solo mostrare il tempo (di CPU, di sistema e reale)
Il comando /usr/bin/time cmd può solo mostrare il tempo (di CPU, di sistema e reale)
37
35. Quale delle seguenti affermazioni sui comandi less e more è falsa? Sono specialmente utili quando si vuole visualizzare un output molto lungo (che non è possibile visualizzare in un’intera schermata di terminale Entrambi permettono di ricercare espressioni regolari Per terminarli occorre premere CTRL+C Sono entrambi interattivi
Per terminarli occorre premere CTRL+C
38
36. Quale delle seguenti affermazioni sulle syscall wait e waitpid è falsa? Se una chiamata wait(&status); ha successo, il valore di status coincide con l’exit status del processo figlio appena terminato Ogni chiamata wait(&status); è equivalente alla chiamata waitpid(-1, &status, 0) Le chiamate alla wait sono sempre bloccanti Le chiamate alla waitpid possono non essere bloccanti
Se una chiamata wait(&status); ha successo, il valore di status coincide con l’exit status del processo figlio appena terminato
39
37. Relativamente alla programmazione bash, quale delle seguenti affermazioni è vera? L’acronimo BASH sta per Bourne Advanced Shell Nessuna delle altre opzioni è vera È possibile definire array associativi, con la seguente sintassi: declare -A myArray={‘key1’=’value1’, ‘key2’=’value2’} Non è possibile definire array associativi
Nessuna delle altre opzioni è vera
40
38. Quale delle seguenti affermazioni sulle directory di un filesystem di Linux è vera: Può contenere solo file regolari e altre directory Non può mai contenere degli hard disk Nessuna delle opzioni è vera Ha sempre una directory padre, eventualmente corrisponde a se stessa
Ha sempre una directory padre, eventualmente corrisponde a se stessa
41
39. Quale delle seguenti affermazioni sulle syscall di Linux che riguardano i files è falsa? > La syscall chdir ha l’effetto di cambiare l’esecuzione delle sole chiamate ad open che usano path relativi come primo argomento > La syscall chdir(path) ha lo stesso effetto del comando bash cd path lanciato in una sottoshell > La syscall rename(oldpath, newpath) ha lo stesso effetto del comando bash cp oldpath newpath > La syscall chroot ha l’effetto di cambiare l’esecuzione delle sole chiamate ad open che usano path assoluti come primo argomento
La syscall rename(oldpath, newpath) ha lo stesso effetto del comando bash cp oldpath newpath
42
40. Quale delle seguenti affermazioni sulle syscall di Linux che riguardano i files e che si trovano nella sezione 2 del manuale è falsa? > Mentre le funzioni della libreria standard possono solo agire solo su file regolari, le syscall di Linux possono agire su tutti i tipi di file(regolari, directory, pipe, …) > Le funzioni della libreria standard agiscono su una struttura di tipo FILE *, mentre le syscall agiscono su un file descriptor interno > Nessuna delle syscall di Linux accetta come argomento input o output formattato stile printf > Le syscall Linux permettono solamente le seguenti operazioni: apertura, chiusura, scrittura, lettura, posizionamento
Le syscall Linux permettono solamente le seguenti operazioni: apertura, chiusura, scrittura, lettura, posizionamento
43
41. Quale delle seguenti affermazioni sulle syscall di Linux che riguardano le directory è falsa? > La syscall readdir, con argomento uguale a quanto ritornato da una precedente opendir avvenuta con successo, ritorna un puntatore ad una struttura struct dirent, che contiene il nome di un file o di una directory contenuta nella directory passata a opendir > Chiamare la syscall open su una directory può avere successo > Per poter cambiare il contenuto di una directory occorre aprirla con la syscall opendir > Per poter leggere il contenuto di una directory occorre aprirla con la syscall opendir
Per poter cambiare il contenuto di una directory occorre aprirla con la syscall opendir
44
42. Quale delle seguenti affermazioni sul comando kill è falsa? > Per mandare il segnale 9 al processo in background con job id 3, è sufficiente scrivere il comando kill -KILL %3 > Per mandare il segnale SIGTERM al processo con PID 19330, è sufficiente scrivere il comando kill -SIGTERM 19330 > Per mandare il segnale SIGINT al processo in background con job id 3, è sufficiente scrivere il comando kill –‘kill -l SIGINT’ %3 > Per mandare il segnale 9 al processo con PID 10, è sufficiente scrivere il comando kill -KILL %10
Per mandare il segnale 9 al processo con PID 10, è sufficiente scrivere il comando kill -KILL %10
45
43. Per eliminare tutte le linee duplicate in un file di testo (senza preoccuparsi dell’ordinamento delle righe) occorre: > utilizzare congiuntamente i comandi sort e uniq > utilizzare congiuntamente i comandi cat e grep > utilizzare il comando uniq con opzione -u > utilizzare il comando uniq
utilizzare congiuntamente i comandi sort e uniq
46
44. Quale delle seguenti affermazioni sulle pipe di Linux è vera? > Usando la syscall pipe, vengono automaticamente aperti 2 file descriptor > Nessuna delle altre opzioni è vera > Per usare le named pipes, è sempre necessario chiamare la syscall mkfifo > usando la syscall mkfifo, viene aperto un solo file descriptor
Usando la syscall pipe, vengono automaticamente aperti 2 file descriptor
47
45. Quale delle seguenti affermazioni sulle syscall di Linux che riguardano i files è falsa? > La syscall chown(nomefile, -1, gid) ha lo stesso effetto del comando bash chgrp nomefile > La syscall mkdir(nomedir, mode) ha lo stesso effetto del comando bash mkdir -m mode nomedir > La syscall dup2(2, 1) ha l’effetto di ridigere lo stdout nello stderr > La syscall stat(nomefile, buf) ha lo stesso effetto del comando bash stat nomefile
La syscall stat(nomefile, buf) ha lo stesso effetto del comando bash stat nomefile
48
46. Gli script sed: > Sono file di testo composti da sequenze di linee che possono essere del tipo N azione, dove N è il numero di linea del file di ingresso che sed sta processando ed azione è un comando Unix da eseguire sulla linea N > Nessuna delle altre opzioni è vera > Sono script (es: bash) al cui interno viene allocato il comando sed > Sono file di testo composti da sequenze di linee del tipo condizione azione, dove la condizione può essere, ad esempio, un numero di linea o una espressione regolare
Sono file di testo composti da sequenze di linee del tipo condizione azione, dove la condizione può essere, ad esempio, un numero di linea o una espressione regolare
49
47. Quale delle seguenti affermazioni sui comandi cat e od è falsa? > I comandi od file e cat file non possono mai dare lo stesso risultato > I comandi od file e cat file danno lo stesso risultato se file è un file di testo ASCII > Il comando cat interpreta ogni sequenza di byte letta come un carattere (tipicamente UTF8), e lo stampa > Il comando od scrive ogni singolo byte letto usando il suo valore numerico
I comandi od file e cat file danno lo stesso risultato se file è un file di testo ASCII
50
48. Relativamente alla programmazione bash, quale delle seguenti affermazioni sul carattere # è vera? > Rappresenta sempre l’inizio di un commento, con un’unica eccezione: quando è preceduto dal carattere $ > Se è seguito dal carattere !, non rappresenta mai l’inizio di un commento > Nessuna delle opzioni è vera > Se presente in uno script, tutto quello che lo segue è sempre considerato commento
Nessuna delle opzioni è vera
51
49. Quale delle seguenti affermazioni sulle syscall dei processi Linux è falsa? > La syscall setuid() permette a qualsiasi processo di cambiare il suo real user ID > La syscall getuid() permette a qualsiasi processo di conoscere il suo real user ID > La syscall getppid() ritorna il PID del processo che ha generato quello chiamante (o che lo ha adottato) > La syscall getpid() ritorna il PID del processo chiamante
La syscall setuid() permette a qualsiasi processo di cambiare il suo real user ID
52
50. Relativamente alla programmazione bash, quale delle seguenti affermazioni è vera? > Si può dichiarare esplicitamente il tipo di una variabile, anteponendolo al nome della variabile stessa (es: int count) > Ad una variabile di tipo intero non è possibile assegnare un valore di tipo diverso, altrimenti il programma termina con un errore > Nessuna delle altre opzioni è vera > Non è possibile dichiarare una variabile in sola lettura: una variabile definita in uno script bash è sempre modificabile
Nessuna delle altre opzioni è vera
53
51. Relativamente alla programmazione bash, quale delle seguenti affermazioni è vera? > Si può dichiarare esplicitamente il tipo di una variabile, anteponendolo al nome della variabile stessa (es: int count) > Ad una variabile di tipo intero non è possibile assegnare un valore di tipo diverso, altrimenti il programma termina con un errore > Una volta dichiarato il tipo di una variabile, lo si può cambiare solo dopo aver invocato il comando unset > Non è possibile dichiarare una variabile in sola lettura: una variabile definita in uno script bash è sempre modificabile
Una volta dichiarato il tipo di una variabile, lo si può cambiare solo dopo aver invocato il comando unset
54
52. Quale delle seguenti affermazioni sul comando ps è vera? > Senza nessun argomento, mostra tutti i processi lanciati dall’utente attuale nel terminale attuale > Per ogni processo, mostra sempre il suo PID, indipendentemente dagli argomenti con cui viene lanciato > Non è possibile usarlo per vedere i processi lanciati dall’utente root > È possibile usarlo per vedere solo i processi che superano un certo uso della RAM
Senza nessun argomento, mostra tutti i processi lanciati dall’utente attuale nel terminale attuale
55
53. Quale delle seguenti affermazioni sui processi Linux è vera? > Nessuna delle altre opzioni è vera > Per ogni terminale aperto, ci può essere al massimo un job in background > Per lanciare un processo in modo tale che non scriva su stdout, lasciando così modo di scrivere altri comandi sulla bash, è sufficiente lanciarlo in background > Se si vuole dare input da stdin senza redirezioni ad un processo, è necessario lanciarlo in foreground
Se si vuole dare input da stdin senza redirezioni ad un processo, è necessario lanciarlo in foreground
56
54. Quale delle seguenti affermazioni sui processi Linux è vera? > Nessuna delle altre opzioni è vera > Il text segment contiene le istruzioni da eseguire, e non può essere condiviso con altri processi > Lo stack contiene i dati statici inizializzati ed alcune costanti d’ambiente > Il process control block (PCB) mantiene le informazioni essenziali di ogni processo, e uno stesso PCB può essere condiviso tra processi diversi
Nessuna delle altre opzioni è vera
57
55. Quale delle seguenti affermazioni sui processi Linux è falsa? > I comandi built-in della bash generano sempre nuovi processi > Per capire se un comando della bash è o no builtin, è sufficiente usare il comando type > Il comando cd è built-in della bash > Un comando built-in della bash non corrisponde ad alcun file eseguibile dedicato
I comandi built-in della bash generano sempre nuovi processi
58
56. Quale dei seguenti campi non è presente nel process control block? > Change time > GID reale ed effettivo > Nice > Current working directory
Change time
59
57. Quale delle seguenti affermazioni sui comandi della bash è falsa? > Il comando type file mostra il tipo del file (regolare, directory, etc) > Il comando whoami mostra lo username dell’utente attualmente loggato nel terminale in cui viene digitato il comando (potrebbe non coincidere con l’utente che ha effettuato il login grafico) > Il comando id può essere usato per visualizzare i gruppi cui un utente appartiene > Il comando which cmd mostra qual è il file eseguibile che viene eseguito quando si lancia il comando cmd, ma solo per i comando che non sono builtin
Il comando type file mostra il tipo del file (regolare, directory, etc)
60
58. Quale delle seguenti affermazioni sulle syscall dei processi in Linux è vera? > Se un processo viene lanciato nel seguente modo: var=valore ./a.out, allora esso può ottenere var con la chiamata a getenv("valore"); > Per qualsiasi processo è possibile conoscere il suo ambiente di esecuzione senza effettuare alcuna syscall > Se un processo viene lanciato nel seguente modo: var=valore ./a.out, allora esso può ottenere valore con la chiamata a setenv("var","valore", 1); > Se un processo viene lanciato nel seguente modo: var=valore ./a.out, allora esso può ottenere valore con la chiamata a putenv("var=valore");
Per qualsiasi processo è possibile conoscere il suo ambiente di esecuzione senza effettuare alcuna syscall
61
59. Quale delle seguenti affermazioni è vera? > Linux è multiutente, perché definisce più utenti, di cui però uno solo può essere loggato su una data macchina > Linux è multiutente, perché definisce più utenti; in un dato istante, possono esistere 2 o più processi appartenenti ad utenti diversi > Linux è multiprocesso, perché permette a più utenti contemporaneamente di essere loggati sulla stessa macchina > Linux è multiprocesso, perché può essere usato su una macchina con più processi
Linux è multiutente, perché definisce più utenti; in un dato istante, possono esistere 2 o più processi appartenenti ad utenti diversi
62
60. Quale delle seguenti affermazioni è vera? > Linux è multiutente, perché definisce più utenti, di cui però uno solo può essere loggato su una data macchina > Nessuna delle altre opzioni è vera > Linux è multiprocesso, perché permette a più utenti contemporaneamente di essere loggati sulla stessa macchina > Linux è multiprocesso, perché può essere usato su una macchina con più processi
Nessuna delle altre opzioni è vera
63
61. Il linguaggio C: > È incompatibile con i Sistemi Operativi della famiglia Windows > Nessuna delle altre opzioni è vera > È un linguaggio strutturato e compilato > E un linguaggio non strutturato e compilato
È un linguaggio strutturato e compilato
64
62. Quale delle seguenti non è un possibile stato di un processo Linux? > Uninterruptible sleep > Stopped > Running > Continued
Continued
65
63. Quale delle seguenti non è un possibile stato di un processo Linux? > Uninterruptible sleep > Stopped > Running > Orphaned
Orphaned
66
64. Quale delle seguenti affermazioni sul comando top è vera? > Se lanciato con il comando top, per terminarlo è necessario premere CTRL+C > Il suo output è uguale a quello di ps, ma le opzioni sono diverse > Se lanciato con il comando top -b, per terminarlo è sufficiente premere il tasto Q > Nessuna delle altre affermazioni è vera
Nessuna delle altre affermazioni è vera
67
65. Relativamente alla programmazione bash, quali delle seguenti affermazioni è esatta? > Il comando $count[3] stampa il quarto elemento dell’array count > Il comando $count[3] stampa l’elemento con indice 3 dell’array count. Gli array in bash sono sparsi quindi non c’è garanzia che si tratti del terzo o del quarto elemento dell’array > Il comando $count[3] stampa il terzo elemento dell’array count > Nessuna delle opzioni
Nessuna delle opzioni
68
66. Quale delle seguenti affermazioni sui processi Linux è vera? > Per visualizzare i processi attualmente in esecuzione su una determinata bash, è sufficiente usare il comando jobs > Tutti i processi in background sono in stato Stopped > Per riportare in foreground un determinato job in background, è sufficiente dare il comando fg sulla bash dove il job è in background, ma solo se tale job è l’attuale "current job"in background > Per stoppare un processo in foreground, si può sia mandare un segnale SIGTSTP che premere CTRL+Z in una qualsiasi shell
Per riportare in foreground un determinato job in background, è sufficiente dare il comando fg sulla bash dove il job è in background, ma solo se tale job è l’attuale "current job"in background
69
67. Per modificare tutte le occorrenze della lettera o ed i rispettivamente in O ed 1 di un file di testo, quale comando è più appropriato utilizzare? > awk > sed > grep > tr
sed
70
68. Si supponga di voler vedere, per tutti i processi dell’utente utente, il suo PID, il suo PPID, il comando usato per lanciare il processo (con tutti gli argomenti), la sua occupazione totale di memoria in kB e la sua attuale occupazione di memoria in RAM (senza considerare quindi la parte eventualmente swappata su disco), sempre in kB. Quale dei seguenti comandi è quello corretto? > ps -uutente -o pid,ppid,cmd,rss,vsz > ps -uutente -o pid,ppid,cmd,rss,sz > ps -e -o pid,ppid,cmd,vsz,rss > ps -uutente -o pid,ppid,cmd,vsz,rss
ps -uutente -o pid,ppid,cmd,vsz,rss
71
69. Una espressione regolare: > È composta da caratteri literal e caratteri di punteggiatura > Non può essere formata da soli caratteri non literal > Descrive implicitamente un insieme di stringhe che hanno almeno un match con se stessa > Non può essere formata da soli caratteri literal
Descrive implicitamente un insieme di stringhe che hanno almeno un match con se stessa
72
70. Quale delle seguenti affermazioni è vera? > Ogni risorsa di un sistema Unix, ad eccezione dei processi e periferiche hardware, è rappresentato da un file > Ogni risorsa di un sistema Unix, ad eccezione delle connessioni di rete (socket), è rappresentato da un file > Ogni risorsa di un sistema Unix, ad eccezione dei processi, è rappresentato da un file > In un sistema Unix tutte le risorse sono rappresentate da un file
Ogni risorsa di un sistema Unix, ad eccezione dei processi, è rappresentato da un file
73
71. Quale delle seguenti affermazioni è vera? > Ogni risorsa di un sistema Unix, ad eccezione dei processi e periferiche hardware, è rappresentato da un file > Ogni risorsa di un sistema Unix, ad eccezione delle connessioni di rete (socket), è rappresentato da un file > Ogni risorsa di un sistema Unix, ad eccezione dei stampanti, è rappresentato da un file > Nessuna delle opzioni è vera
Nessuna delle opzioni è vera
74
72. Quale delle seguenti affermazioni sul comando kill è vera? > È obbligatorio specificare il segnale da inviare, come numero intero > Lanciato senza nessun argomento, manda SIGKILL all’ultimo processo lanciato > Può essere usato per ottenere lo stesso risultato tanto del CTRL+C quanto del CTRL+Z > Nessuna delle altre affermazioni è vera
Può essere usato per ottenere lo stesso risultato tanto del CTRL+C quanto del CTRL+Z
75
73. Quale delle seguenti affermazioni sui processi Linux è vera? > Ogni processo è identificato da un PID e da un job id, che devono coincidere > Un job è un comando della bash che prende sempre il controllo dello stdin > Nessuna delle altre opzioni è vera > Fissato un istante nell’esecuzione del sistema operativo, ci sarà sempre al massimo un job in foreground, mentre quelli in background possono essere più d’uno
Fissato un istante nell’esecuzione del sistema operativo, ci sarà sempre al massimo un job in foreground, mentre quelli in background possono essere più d’uno
76
74. Si supponga che sia appena stata eseguita la seguente riga di codice di un processo: int pid = fork();. Quale delle seguenti affermazioni è vera? > Nel processo padre, la variabile pid vale assume 1 solo valore, corrispondente al suo stesso PID > Nel processo figlio, la variabile pid vale assume 1 solo valore, corrispondente al PID del padre > C’è un nuovo processo pronto per andare in esecuzione, a meno che la variabile pid non valga -1 > Nel processo padre, la variabile pid assume 2 diversi valori
C’è un nuovo processo pronto per andare in esecuzione, a meno che la variabile pid non valga -1
77
75. Quali delle seguenti affermazioni sulla variabile IFS è vera? > Può essere usato per cambiare l’esecuzione di un ciclo for della bash > Contiene il carattere utilizzato per la separazione in token da awk > Nessuna delle opzioni è vera > Deve contenere, come valore, un solo carattere, da usare per la separazione in parole nella bash (word splitting)
Può essere usato per cambiare l’esecuzione di un ciclo for della bash
78
76. Quale delle seguenti affermazioni sui processi Linux è vera? > Il process control block mantiene le informazioni essenziali di ogni processo, è mantenuto su disco e viene swappato in RAM quando il processo va in esecuzione > Lo heap contiene i dati statici inizializzati ed alcune costanti d’ambiente > Il text segment contiene le istruzioni da eseguire, e viene sempre mantenuto interamente in RAM > Nessuna delle altre opzioni è vera
Nessuna delle altre opzioni è vera
79
77. Quale dei seguenti linguaggi non è mai stato usato per implementare Unix? > L’assembler del PDP-7 > Il B > Il C > Le altre risposte contengono tutte dei linguaggi usati per implementare Unix
Le altre risposte contengono tutte dei linguaggi usati per implementare Unix
80
78. Quale delle seguenti affermazioni sulle espressioni regolari è vera? > Il metacarattere + consente di concatenare due regex > Non è mai stato possibile definire un match con il carattere . > Nessuna delle altre opzioni è vera > Un carattere literal ha un match con se stesso
Un carattere literal ha un match con se stesso
81
79. Quale delle seguenti affermazioni è vera? > Il file system di Linux è una foresta ovvero un albero con più radici (una per ogni dispositivo fisico di memoria di massa collegato alla macchina, per esempio hard disk, chiave USB, CD, DVD, …) > Nel file system di Linux, ogni nodo interno è un file o una directory, mentre le foglie sono sempre directory > Nel file system di Linux esistono anche directory (denominate virtuali) che non si trovano su nessun dispositivo fisico di memoria di massa > Il file System di Linux è gerarchico, perché per accedere ad un file occorre effettuare una chiamata di sistema al kernel
Nel file system di Linux esistono anche directory (denominate virtuali) che non si trovano su nessun dispositivo fisico di memoria di massa
82
80. Quale delle seguenti affermazioni sul comando find è falsa? > È possibile restringere la ricerca ai soli file che sono link simbolici > È obbligatorio che gli starting point siano delle directory > È possibile cercare nomi di file che rispettino un dato pattern o una data regular expression > È possibile cercare anche directory, e non solo file
È obbligatorio che gli starting point siano delle directory
83
81. Quale delle seguenti affermazioni sul filesystem Linux è vera? > Tutte le opzioni sono false > È logicamente unico ed ha come punto di inizio la root (radice) rappresentata dal simbolo / > Tutte le opzioni sono vere > È una struttura ad albero in cui le directory sono nodi intermedi e non possono mai essere nodi terminali
È logicamente unico ed ha come punto di inizio la root (radice) rappresentata dal simbolo /
84
82. Quale delle seguenti affermazioni è vera? > Non è possibile definire una basic REGEX che abbia un match con una stringa formata da 3 o più occorrenze del carattere * > Il metacarattere ^ consente di dichiarare un match ad inizio stringa solo se compare come primo carattere della REGEX > @ è un metacarattere delle REGEX estese > Tutte le risposte sono vere
Il metacarattere ^ consente di dichiarare un match ad inizio stringa solo se compare come primo carattere della REGEX
85
83. Quale delle seguenti affermazioni sui comandi cat e od è falsa? > L’opzione -A di od permette di scegliere la base (decimale, ottale od esadecimale) di tutti i bytes da stampare > L’opzione -n di cat fa precedere ogni riga stampata con il numero della riga stessa (a partire da 1) > L’opzione -E di cat stampa anche il carattere $ alla fine di ogni riga > L’opzione -j B di od permette di cominciare la visualizzazione a partire dal (B + 1)-esimo byte
L’opzione -A di od permette di scegliere la base (decimale, ottale od esadecimale) di tutti i bytes da stampare
86
84. Quale delle seguenti affermazioni è falsa? > Il carattere \ ha un match con la regex ‘\’ > . è un metacarattere che ha un match con una occorrenza di qualsiasi carattere > I mecataratteri [] consentono di definire il match con un range di caratteri > La concatenazione di due o più regex è una regex
Il carattere \ ha un match con la regex ‘\’
87
85. Il linguaggio C: > Viene definito per la creazione del primo Sistema Operativo Unix > Nasce negli anni 70 per sviluppare programmi portabili su diverse architetture hardware > Nasce come linguaggio di programmazione proprietario per l’implementazione dei programmi sui sistemi DEC PDP-11 > Nasce negli anni 70 come evoluzione del linguaggio B
Nasce negli anni 70 come evoluzione del linguaggio B
88
86. Esiste in unix un comando che consente di stampare il numero di occorrenze di una riga di un file? > Nessuna delle altre opzioni è ver > No, occorre utilizzare congiuntamente i comandi uniq e wc > No, occorre utilizzare congiuntamente i comandi sort e wc > Si
Si
89
87. Quali tra le seguenti affermazioni è vera? > cat -N -6 filename stampa le ultime 6 ighe del filename > tail -c n filename stampa le ultime n righe del filename > cut consente di tagliare un file in gruppi di righe contigue in base a un carattere di spaziatura > nessuna delle altre risposte è vera
nessuna delle altre risposte è vera
90
88. Quali tra le seguenti affermazioni è vera? > È possibile stampare esclusivamente le ultime N righe di un file di testo con il comando cat -N -6 > Il comando tail -c /var/log/maillog stampa in maniera continua le ultime righe del file /var/log/maillog > Il comando cut consente di selezionare (scrivendole in output) singole righe di un file > Nessuna delle altre opzioni è vera
Nessuna delle altre opzioni è vera
91
89. Quale delle seguenti affermazioni sulle applicazioni client-server realizzate tramite socket è vera? > Il client deve sempre chiamare la syscall bin > Il server deve chiamare la syscall connect > Il client deve sempre chiamare la syscall listen > Sia il server che il client devono sempre chiamare la syscall socket
Sia il server che il client devono sempre chiamare la syscall socket
92
90. Si supponga di voler scrivere un programma immune al CTRL+C. Quali dei seguenti frammenti di codice realizza quanto detto sopra? > signal(SIGTERM, SIG_DFL); > signal(SIGINT, SIG_DFL); > signal(SIGINT, SIG_IGN); > Non è possibile essere immuni al CTRL+C
signal(SIGINT, SIG_IGN);
93
91. Quale dei seguenti comandi scrive una singola riga che consiste nel solo carattere '? > echo "'"| awk '{print "'";}' > echo niente | awk '{print "'"'"' ";}' > Nessuna delle altre opzioni è corretta > echo niente | awk '{print "'"'"'";}'
echo niente | awk '{print "'"'"'";}'
94
92. Nell'albero di directory radicato nella directory corrente di una shell bash ci sono molteplici file di testo, ognuno dei quali contiene il log di una esecuzione di un comando. La prima riga di ogni log riporta esattamente il comando usato per ottenere il log stesso, opzioni ed argomenti compresi. Volendo sapere quali sono i diversi comandi (opzioni ed argomenti esclusi; il comando non contiene mai spazi ed è sempre all'inizio della riga) usati nei vari file di log, quale dei seguenti comandi bash è sbagliato? > awk 'FNR == 1{print $1}' `find . -type f` | sort | uniq > for file in `find . -type f`; do awk 'FNR == 1{print $1}' $file; done | sort | uniq > for file in `find . -type f`; do head -1 $file | awk '{print $1}' | sort | uniq; done > for file in `find . -type f`; do head -1 $file | awk '{print $1}'; done | sort | uniq
for file in `find . -type f`; do head -1 $file | awk '{print $1}' | sort | uniq; done
95
93. Quale dei seguenti comandi Bash permette di scrivere il numero di caratteri di ogni singola riga di un file di testo nomefile? > for riga in "`cat nomefile`"; do echo $riga | wc -c; done > var=$(cat nomefile); for riga in ${var}; do echo $riga | wc -c; done > for riga in `cat nomefile`; do echo $riga | wc -c; done > Nessuna delle altre opzioni è corretta
Nessuna delle altre opzioni è corretta
96
94. Quale delle seguenti affermazioni sul Linguaggio C è vera? > Richiede che i programmi siano sempre scritti in file con estensione .c > Richiede che ogni modulo sia scritto in un file separato, come nel Java > È un linguaggio interpretato > È un linguaggio compilato
È un linguaggio compilato
97
95. Quale delle seguenti affermazioni sul Linguaggio C è vera? > Richiede che i programmi siano sempre scritti in file con estensione .c > È incompatibile con i Sistemi Operativi della famiglia Windows > È un linguaggio non strutturato e compilato > È un linguaggio strutturato e compilato
È un linguaggio strutturato e compilato
98
96. Si supponga di voler trovare tutti i link simbolici presenti nell'intero file system, che siano stati acceduti nell'ultimo giorno, e si supponga di volerli spostare nella directory /tmp. Quale dei seguenti comandi realizza tale specifica? > find/ -type l -atime 0 -exec mv '{}' /tmp/ \; > find/ -type l -ctime 0 | aw k '{print "mv", $1, "/tmp";}' > find/ -type l -atime 0 -exec mv /tmp/ '{}'';' > find/ -type l -ctime 0 -exec mv '{}' /tmp/ \;
find/ -type l -atime 0 -exec mv '{}' /tmp/ \;
99
97. Quale delle seguenti affermazioni sulle syscall dei processi in Linux è falsa? > La syscall getuid() ritorna il real user ID del processo chiamante > La syscall getpid() ritorna il PID del processo chiamante > La syscall getppid() ritorna il PID del processo che ha generato quello chiamante (o che lo ha adottato) > La syscall setuid() ritorna il real user ID del processo chiamante
La syscall setuid() ritorna il real user ID del processo chiamante
100
98. Si supponga che l'utente nomeutente voglia terminare forzatamente tutti i processi attualmente in esecuzione che lui stesso abbia creato con il comando bash cmd (senza argomenti). Si supponga anche che la stringa cmd non contenga metacaratteri per regular expressions estese. Quale dei seguenti comandi bash deve usare l'utente nomeutente? > kill -9 `ps -unomeutente -opid,cmd | grep -E '^[0-9]+ cmd$' | awk '{print $1}'` > kill -9 `ps -unomeutente -opid,cmd | grep -E '^[0-9]+ cmd$'` > kill -9 `ps -unomeutente -opid,cmd | grep -E 'cmd' | awk '{print $1}'` > Nessuna delle altre opzioni è vera
kill -9 `ps -unomeutente -opid,cmd | grep -E '^[0-9]+ cmd$' | awk '{print $1}'`
101
99. Quale delle seguenti affermazioni sui programmi scritti in Linguaggio C è vera? > Il carattere di fine stringa è essenziale nel caso in cui si passi una stringa alla syscall write su una pipe > Il carattere di fine stringa è essenziale nel caso in cui si passi una stringa alla funzione printf con specificatore di conversione %s > Le variabili di tipo char *, se inizializzate a tempo di dichiarazione con una costante stringa, avranno un byte in più costituito dal carattere '0' > Nessuna delle altre opzioni è vera
Il carattere di fine stringa è essenziale nel caso in cui si passi una stringa alla funzione printf con specificatore di conversione %s
102
100. Esiste in Linux un comando che consente, sfruttando opportunamente le sue opzioni, di stampare il numero di occorrenze consecutive di una riga in un file? > No, occorre utilizzare congiuntamente i comandi grep e wc (con opportune opzioni) > No, occorre utilizzare congiuntamente i comandi sort e wc (con opportune opzioni) > Si > Nessuna delle altre opzioni è vera
si
103
101. Quale delle seguenti affermazioni su un file in un filesystem Linux è vera? > Può esistere un solo path, detto assoluto, che permette di richiedere l'accesso a tale file > Nessuna delle altre opzioni è vera > Può esistere un solo path relativo che permette di richiedere l'accesso a tale file > Possono esistere uno o più path assoluti che permettono di richiedere l'accesso a tale file
Può esistere un solo path, detto assoluto, che permette di richiedere l'accesso a tale file
104
102. Si consideri il seguente programma in codice C: ``` #include #include #include int main() { struct s { char *a; char b[20]; } *p[2]; char *a = strdup("ciao"); p[0] = (struct s*)malloc(sizeof(struct s)); p[0]->a = a; strcpy(p[0]->b, a); COPIA a[1] = '0'; printf("%s %s %s %s\ ", p[0]->a, p[0]->b, p[1]->a, p[1]->b); } ``` Quale delle seguenti affermazioni è vera? > Se COPIA consiste nell'istruzione memcpy(p[1], p[0], sizeof(struct s));, allora le istruzioni seguenti (se eseguite) avranno un effetto non predicibile > Se COPIA consiste nell'assegnamento p[1] = p[0];, allora l'ultima istruzione scriverà c0ao c0ao c0ao c0ao > Se COPIA consiste nell'assegnamento p[0] = p[1];, allora l'ultima istruzione scriverà c0ao ciao ciao ciao > Se COPIA consiste nell'assegnamento p[1] = p[0];, allora le istruzioni seguenti (se eseguite) avranno un effetto non predicibile
Se COPIA consiste nell'istruzione memcpy(p[1], p[0], sizeof(struct s));, allora le istruzioni seguenti (se eseguite) avranno un effetto non predicibile
105
103. Si consideri il seguente frammento di codice C: ``` int main() { struct s { char *a; char b[20]; } p[5]; ... } ``` > Non è stata allocata la memoria per le 5 aree puntate dai 5 campi a > È stata allocata la memoria per 5 strutture di tipo struct s sullo heap > È stata allocata la memoria per 5 strutture di tipo struct s sullo stack delle chiamate > È stata allocata la memoria per i 100 caratteri dei 5 campi b sullo stack delle chiamate
È stata allocata la memoria per 5 strutture di tipo struct s sullo heap
106
104. Si supponga di eseguire con successo i seguenti comandi da una shell sulla quale non ci sono job in background: ``` sudo cp -a `which cat` . sudo chmod u+s cat ./cat & cat & ``` Qual é quella falsa? > Entrambi i job lanciati saranno in stato di Stopped > Eseguendo il comando ps h -oruid -p `jobs -l | awk '{print $2}'` si ottengono 2 numeri diversi > Eseguendo il comando ps h -opid -p `jobs -l | awk '{print $2}'` si ottengono 2 numeri diversi > Eseguendo il comando ps h -oeuid -p `jobs -l | awk '{print $2}'` si ottengono 2 numeri diversi
Eseguendo il comando ps h -opid -p `jobs -l | awk '{print $2}'` si ottengono 2 numeri diversi
107
105. Un file nomefile contiene il risultato della compilazione di un programma. Il compilatore in questione scrive righe che iniziano con la sola parola 'error' per gli errori veri e propri, e con 'error warning' per i semplici warning (è garantito che la stringa 'error warning' non sia mai all'inizio di una riga contenente un errore vero e proprio). Quale dei seguenti comandi restituisce le sole righe che si riferiscono ad errori veri e propri? > grep -E '^error ([^w]|w[^a]|wa[^r]|war[^n]|warn[^i]|warni[^n]|warnin[^g])' > Nessuna delle altre opzioni è corretta > grep -E '^error' nomefile | grep -v warning > grep -E '^error [^w][^a][^r][^n][^i][^n][^g]' nomefile
grep -E '^error' nomefile | grep -v warning
108
106. Quale delle seguenti affermazioni sulle syscall wait e waitpid è falsa? > Se una chiamata wait(&status); ha successo, il valore di status contiene, tra le altre cose, un flag che indica se il processo figlio appena terminato è terminato in modo normale > Se una chiamata wait(&status); ha successo, il valore di status contiene, tra le altre cose, l'exit status del processo figlio appena terminato > Se una chiamata wait(&status); ha successo, il valore di status contiene, tra le altre cose, il PID del processo figlio appena terminato > Se una chiamata wait(&status); ha successo, il valore di status contiene, tra le altre cose, un flag che indica se il processo figlio appena terminato è stato ucciso da un segnale
Se una chiamata wait(&status); ha successo, il valore di status contiene, tra le altre cose, il PID del processo figlio appena terminato
109
107. Si consideri il seguente programma in codice C: ``` #include #include #include int main() { struct s { char *a; char b[20]; } p[2]; char *a = strdup("ciao"); p[0].a = a; strcpy(p[0].b, a); COPIA a[1] = '0'; printf("%s %s %s %s\ ", p[0].a, p[0].b, p[1].a, p[1].b); } ``` Quale delle seguenti affermazioni è falsa? > Se COPIA consiste nell'assegnamento p[1] = p[0];, allora l'ultima istruzione scriverà c0ao c0ao c0ao c0ao > Se COPIA consiste nell'istruzione memcpy(&p[1], &p[0], sizeof(struct s));, allora l'ultima istruzione scriverà c0ao ciao c0ao ciao > Se COPIA consiste nell'assegnamento p[0] = p[1];, allora l'ultima istruzione avrà un effetto non predicibile > Se COPIA consiste nell'assegnamento p[1] = p[0];, allora l'ultima istruzione scriverà c0ao ciao c0ao ciao
Se COPIA consiste nell'assegnamento p[1] = p[0];, allora l'ultima istruzione scriverà c0ao ciao c0ao ciao
110
108. La directory corrente di una shell bash contiene N directory non nascoste. In ognuna di queste directory è contenuto un file di testo .txt contenente una sola riga con un numero M, potenzialmente diverso da directory a directory. Inoltre può essere presente un file dati.M.txt. Si vuole sapere quanti sono in totale, tra le varie directory, questi file dati.M.txt, senza scrivere nulla su standard error. Quale dei seguenti comandi bash è corretto? > for dir in ./*; do test -f $dir/dati.`cat $dir/.txt`.txt | wc -l; done > for dir in ./*; do test -f $dir/dati.`cat $dir/.txt`.txt && echo si; done | wc -l > for dir in ./*; do test -f $dir/dati.`cat $dir/.txt`.txt || echo no; done | wc -l > for dir in ./*; do test -f $dir/dati.`cat $dir/.txt`.txt && echo no; done | wc -l
for dir in ./*; do test -f $dir/dati.`cat $dir/.txt`.txt && echo si; done | wc -l
111
109. Si supponga di eseguire con successo i seguenti comandi da una shell sulla quale non ci sono job in background: sudo cp -a `which cat` . sudo chmod u+s cat ./cat & cat & Quale delle seguenti affermazioni è falsa? > Entrambi i job lanciati saranno in stato di Stopped > Eseguendo il comando ps h -oruid -p `jobs -l | awk '{print $2}'` si ottengono 2 numeri diversi > Eseguendo il comando ps h -oeuid -p `jobs -l | awk '{print $2}'` si ottengono 2 numeri diversi > Eseguendo il comando ps h -opid -p `jobs -l | awk '{print $2}'` si ottengono 2 numeri diversi
Eseguendo il comando ps h -oruid -p `jobs -l | awk '{print $2}'` si ottengono 2 numeri diversi
112
110. Si supponga di avere il seguente frammento di codice: ``` FILE *stream = fopen("file_esistente.txt","r"); fseek(stream, -100, SEEK_END); long pos = ftell(stream); ``` > int fd = open("file_esistente.txt","O_RDONLY");lseek(fd, -100, SEEK_END);long pos = lseek(fd, 0, SEEK_CUR); > int fd = open("file_esistente.txt","O_RDONLY");lseek(fd, -100, SEEK_END);long pos = lseek(fd, 0, SEEK_END); > int fd = open("file_esistente.txt","O_RDONLY");lseek(fd, -100, SEEK_END);long pos = lseek(fd, -100, SEEK_END); > int fd = open("file_esistente.txt","O_RDONLY");lseek(fd, -100, SEEK_END);long pos = ltell(fd);
int fd = open("file_esistente.txt","O_RDONLY");lseek(fd, -100, SEEK_END);long pos = lseek(fd, 0, SEEK_CUR);
113
111. Si vuole scrivere un programma equivalente a questo script: ``` echo "Esecuzione in corso..." /bin/ls -la echo "fatto" ``` > Nessuna delle altre opzioni è corretta > printf("Esecuzione in corso...");\nexecl("/bin/ls", "/bin/ls", "-la", "/", NULL);\nprintf("fatto\\n");\n > printf("Esecuzione in corso...");\nexecl("/bin/ls", "/bin/ls", "-la");\nprintf("fatto\\n");\n > printf(char **argv = {"-la", "/", 0};\n"Esecuzione in corso...");\nexecl("/bin/ls", "/bin/ls", "-la", "/", NULL);\nprintf("fatto\\n");\n
Nessuna delle altre opzioni è corretta
114
112. Quale dei seguenti frammenti di codice è corretto? > int pid = fork(); if (pid == 0) { /* fai qualcosa, sei il figlio */ }else if (pid > 0) { /* fai qualcosa, sei il padre */ }else { perror("fork failed"); }\n > int pid = fork(); if (pid == 0) { /* fai qualcosa, sei il padre */ }else if (pid > 0) { /* fai qualcosa, sei il figlio */ }else { perror("fork failed"); }\n > Tutte le altre opzioni sono sbagliate > int pid = fork(); if (pid < 0) { /* fai qualcosa, sei il figlio */ }else if (pid > 0) { /* fai qualcosa, sei il padre */ }else { perror("fork failed"); }\n
int pid = fork(); if (pid == 0) { /* fai qualcosa, sei il figlio */ }else if (pid > 0) { /* fai qualcosa, sei il padre */ }else { perror("fork failed"); }\n
115
113. Si supponga di avere il seguente frammento di codice, quale dei seguenti frammenti di codice ha lo stesso effetto? > int var = somefunction1(); double var2 = somefunction2(); char *buf = calloc(sizeof(var2) > sizeof(var)? sizeof(var2) : sizeof(var), sizeof(char)); sprintf(buf, "%d\\n", var); write(1, buf, sizeof(var) + 1); sprintf(buf, "%lf\\n", var2); write(1, buf, sizeof(var2) + 1); > int var = somefunction1(); double var2 = somefunction2(); char buf[4]; sprintf(buf, "%d", var); write(1, buf, sizeof(var)); write(1, "\\n", 1); sprintf(buf, "%lf", var2); write(1, buf, sizeof(var2));write(1, "\\n", 1); > int var = somefunction1(); double var2 = somefunction2(); write(1, (char *)&var, sizeof(var)); write(1, (char *)&var2, sizeof(var2)); > int var = somefunction1(); double var2 = somefunction2(); char *buf = calloc(sizeof(var2) > sizeof(var)? sizeof(var2) : sizeof(var), sizeof(char)); sprintf(buf, "%d", var); write(1, buf, sizeof(var)); write(1, "\\n", 1); sprintf(buf, "%lf", var2); write(1, buf, sizeof(var2)); write(1, "\\n", 1);
int var = somefunction1(); double var2 = somefunction2(); char *buf = calloc(sizeof(var2) > sizeof(var)? sizeof(var2) : sizeof(var), sizeof(char)); sprintf(buf, "%d", var); write(1, buf, sizeof(var)); write(1, "\\n", 1); sprintf(buf, "%lf", var2); write(1, buf, sizeof(var2)); write(1, "\\n", 1);
116
14. Si consideri la riga di comando bash while condizione; do comando1 | comando2; done | comando3. Assumendo che condizione, comando1, comando2 e comando3 non contengano errori, quale delle seguenti affermazioni è vera? > Se espressione risulta essere falsa, comando2 viene eseguito almeno una volta > Nessuna delle altre opzioni è vera > Se espressione risulta essere falsa, comando1 viene eseguito almeno una volta > Se espressione risulta essere falsa, comando3 viene eseguito almeno una volta
Se espressione risulta essere falsa, comando3 viene eseguito almeno una volta
117
115. Si consideri la riga di comando bash if condizione; then comando1; fi. Assumendo che comando1 non contenga errori di sintassi, quale delle seguenti affermazioni è vera? > comando1 viene eseguito solo se condizione scrive 0 su standard output e nulla su standard error > comando1 viene eseguito solo se condizione scrive 1 su standard output e nulla su standard error > comando1 viene eseguito solo se condizione scrive 1 su standard error e nulla su standard output > Nessuna delle altre opzioni è vera
Nessuna delle altre opzioni è vera
118
116. Si supponga che le variabili bash a, b e c abbiano valori, rispettivamente, b, c e 1. Quale delle seguenti affermazioni è vera? > L'espansione aritmetica di a è 1 > Nessuna delle altre opzioni è vera > L'espansione standard di a è 1 > La variabile a viene sempre espansa ad 1
L'espansione aritmetica di a è 1
119
117. Quale delle seguenti affermazioni sul comando top è vera? > Nessuna delle altre affermazioni è vera > Senza argomenti, il suo output è uguale a quello di ps senza argomenti > Se lanciato con la riga di comando top, per terminarlo è necessario premere CTRL + C > Se lanciato con la riga di comando top - b, per terminarlo è sufficiente premere il tasto Q
Nessuna delle altre affermazioni è vera
120
118. Si supponga di voler inizializzare una variabile var1 di una shell bash in modo tale che sia il contenuto del file filename.txt se tale file esiste, ed il valore della variabile var2 altrimenti. Quale dei seguenti comandi realizza correttamente quanto sopra ? > var1=`echo filename.txt 2> /dev/null || cat $var2` > var1=`cat filename.txt 2> /dev/null || echo $var2` > var1=`cat filename.txt > /dev/null || echo $var2` > var1=`cat filename.txt 2> /dev/null && echo $var2`
var1=`cat filename.txt 2> /dev/null || echo $var2`
121
119. Il comando ssh hostname cmd esegue il comando cmd sulla bash della macchina remota hostname, dopo aver richiesto l'immissione della password per l'utente corrente. Supponendo che la fase di connessione e di immissione della password vada a buon fine, quale delle seguenti affermazioni è falsa? > Il comando ssh hostname 'ls '| wc -l esegue sia ls che wc su hostname > Il comando ssh hostname ls \\| wc -l esegue sia ls che wc su hostname > Il comando ssh hostname ls | wc -l esegue ls su hostname, e wc sulla macchina attuale > Il comando ssh hostname ls '|' wc -l esegue sia ls che wc su hostname
Il comando ssh hostname ls | wc -l esegue ls su hostname, e wc sulla macchina attuale
122
120. Si supponga di avere il seguente frammento di codice, e che il file file_esistente.txt abbia il seguente contenuto (comprensivo di 2 caratteri carriage return) 4567 34.56 ``` FILE *stream = fopen("file_esistente.txt", "r"); int var; double var2; fscanf(stream, "%d\\n%lf\\n", &var, &var2); ``` > int fd = open("file_esistente.txt", O_RDONLY); int var; double var2; char buf[4]; read(fd, buf, sizeof(var)); var = atoi(buf); read(fd, buf, sizeof(var2)); var2 = atof(buf); > int fd = open("file_esistente.txt", O_RDONLY); int var; double var2; read(fd, &var, sizeof(var)); read(fd, &var2, sizeof(var2)); > fd = open("file_esistente.txt", O_RDONLY); int var; double var2; char buf[6]; read(fd, buf, 5); var = atoi(buf); read(fd, buf, 6); var2 = atof(buf); > int fd = open("file_esistente.txt", O_RDONLY); int var; double var2; fscanf(fd, "%d\\n%lf\\n", &var, &var2);
int fd = open("file_esistente.txt", O_RDONLY); int var; double var2; char buf[4]; read(fd, buf, sizeof(var)); var = atoi(buf); read(fd, buf, sizeof(var2)); var2 = atof(buf);
123
121. Ignorando eventuali memory leaks, quale dei seguenti frammenti di codice può portare ad un segmentation fault? > char * p = malloc(10 * sizeof(char)); p[1]='a'; free(p) > char * p = malloc(10 * sizeof(char)); p[9]='a'; p = NULL; p=realloc(p, 10*sizeof(char)); free(p) > char * p = calloc(10, sizeof(char)); p[9]='a'; p=realloc(p, 10*sizeof(char)); free(p) > char * p = calloc(10, sizeof(char)); p[9]='a'; free(p) p=realloc(p, 10*sizeof(char)); free(p)
char * p = calloc(10, sizeof(char)); p[9]='a'; free(p) p=realloc(p, 10*sizeof(char)); free(p)
124
122. Il file di testo voti.txt è strutturato come segue: ``` | matricola1 | voto1 | | matricola2 | voto2 | ... ``` Nell'albero di directory radicato in quella corrente, ci sono molteplici file con nome orale.txt, strutturati esattamente come voti.txt. Uno studente ha un voto derivante da un esame orale se la sua matricola compare in almeno uno di questi file chiamati orale.txt. Si vuole sapere quali matricole, tra quelle presenti in voti.txt, abbiano un voto derivante da un esame orale: l'output deve avere una matricola per ogni riga e non deve contenere ripetizioni (assumere che voti.txt non contenga matricole ripetute). Quale dei seguenti comandi è corretto? > files=`find . -name orali.txt`; for m in `awk '{print $2}' voti.txt`; do grep -qw $m $files && echo $m; done > cat voti.txt | awk '{print $2}' | grep -qw `find . -name orali.txt` > files=`find . -name orali.txt`; for m in `awk '{print $2}' voti.txt`; do grep -qw $m $files || { echo $m; continue; }; done > cat `find . -name orali.txt` | grep -qw `awk '{print $2}' voti.txt`
iles=`find . -name orali.txt`; for m in `awk '{print $2}' voti.txt`; do grep -qw $m $files && echo $m; done
125
123. Si consideri il seguente frammento in C: if (fork()) { fork(); fork(); } Assumendo che fork fallisca, quali tra queste è vera? > Si passa da 1 processo a 4 processi > Nessuna delle altre affermazioni è vera > L'ultima fork viene eseguita sia dal processo padre che dal processo figlio risultanti dalla penultima fork > Tutte le fork vengono eseguite solo dal processo padre risultante dalla fork immediatamente precedente (escludendo ovviamente la prima fork, per la quale non c'è il precedente)
Nessuna delle altre affermazioni è vera
126
124. Quale delle seguenti funzioni produce sempre lo stesso standard output della seguente funzione? function grep_l_orig () { stringa=$1 shift grep -l $stringa $* } Anziché la terza riga: > for file in $*; do grep $stringa $file | awk -F: '{print $1}'; done | sort | uniq > for file in $*; do grep $stringa $file | awk -F: 'FNR == 1{print $1}'; done > grep $stringa $* | awk -F: '{print $1}' | sort | uniq > grep $stringa $* | awk -F: '{print $1}'
grep $stringa $* | awk -F: '{print $1}' | sort | uniq
127
125. Quale delle seguenti linee di comando scrive correttamente su standard output tutte le righe in un file di testo file.txt, eliminando le righe duplicate? Nell'output, le righe possono non essere nello stesso ordine di file.txt. > cat file.txt | sort | uniq > cat file.txt | grep | uniq > uniq -u file.txt > cat file.txt | sort | uniquniq file.txt
cat file.txt | sort | uniq
128
126. Si supponga di avere il seguente frammento di codice: FILE *stream = fopen("file_esistente.txt", "r"); int var; double var2; fscanf(stream, "%d\n%lf\n", &var, &var2); e che il file file_esistente.txt abbia come contenuto (comprensivo di due carriage return): 4567 34.56 Quale dei seguenti codici ha lo stesso effetto? int fd = open("file_esistente.txt", O_RDONLY); int var; double var2; fscanf(fd, "%d\n%lf\n", &var, &var2); fd = open("file_esistente.txt", O_RDONLY); int var; double var2; char buf[6]; read(fd, buf, 5); var = atoi(buf); read(fd, buf, 6); var2 = atof(buf); int fd = open("file_esistente.txt", O_RDONLY); int var; double var2; char buf[4]; read(fd, buf, sizeof(var)); var = atoi(buf); read(fd, buf, sizeof(var2)); var2 = atof(buf); int fd = open("file_esistente.txt", O_RDONLY); int var; double var2; char buf[4]; read(fd, buf, sizeof(var)); var = atoi(buf); read(fd, buf, sizeof(var2)); var2 = atof(buf);
int fd = open("file_esistente.txt", O_RDONLY); int var; double var2; char buf[4]; read(fd, buf, sizeof(var)); var = atoi(buf); read(fd, buf, sizeof(var2)); var2 = atof(buf);
129
127. Nell'albero di directory radicato in quella corrente, ci sono molteplici file con estensione .txt. Si vuole stampare su standard output, separatamente su ogni riga, il nome di ogni file, seguito dal suo numero di righe e dalla sua dimensione in bytes (separati da spazi). Quale dei seguenti comandi è corretto? > find . -name '*.txt' -exec wc -l '{}' echo -n '{}'; ls -l '{}' \; > for file in `find . -name '*.txt'`; do {wc -l $file; ls -l $file} | awk 'FNR == 1{save = $1}FNR == 2{print $NF, save, $5}'; done > for file in `find . -name '*.txt'`; do wc -l $file; ls -l $file; done > for file in `find . -name '*.txt'`; do (wc -l $file; ls -l $file) | awk 'FNR == 1{save = $1}FNR == 2{print $NF, save, $5}'; done
for file in `find . -name '*.txt'`; do {wc -l $file; ls -l $file} | awk 'FNR == 1{save = $1}FNR == 2{print $NF, save, $5}'; done
130
128.Assumendo che cmd sia un comando eseguibile con successo, quale delle seguenti affermazioni sul comando time è falsa? > Il comando /usr/bin/time cmd ha anche l'effetto di eseguire il comando cmd > Il comando time cmd, eseguito dalla bash, non può essere usato, neanche aggiungendo opportune opzioni, per mostrare l'uso di RAM fatto da cmd > Esistono 2 comandi time: uno è una keyword della bash e l'altro corrisponde ad un file eseguibile (solitamente /usr/bin/time) > Il comando /usr/bin/time cmd non può essere usato, neanche aggiungendo opportune opzioni, per mostrare l'uso di RAM fatto da cmd
Il comando /usr/bin/time cmd non può essere usato, neanche aggiungendo opportune opzioni, per mostrare l'uso di RAM fatto da cmd
131
129.Si consideri la riga di comando bash comando1 | comando2. Assumendo che comando1 e comando2 non contengano errori di sintassi, quale delle seguenti affermazioni è vera? > Se comando1 non legge dal suo standard input, lo standard output dell'intera riga di comando coincide con lo standard output di comando2 (eseguito da solo) > Se comando2 non legge dal suo standard input, comando1 non viene eseguito > Se comando2 non legge dal suo standard input, lo standard output dell'intera riga di comando coincide con lo standard output di comando2 (eseguito da solo) > Se comando2 non legge dal suo standard input, lo standard output dell'intera riga di comando coincide con lo standard output di comando1 (eseguito da solo)
Se comando2 non legge dal suo standard input, lo standard output dell'intera riga di comando coincide con lo standard output di comando2 (eseguito da solo)
132
130. Si supponga di eseguire i seguenti comandi su una directory vuota con tutti i permessi: ``` touch f1 ln -s f1 l1 ln f1 h1 ln h1 h2 ln -s h2 l2 ``` Quale delle seguenti affermazioni è corretta? > I file f1 ed h1 hanno lo stesso inode, ma diverso inode number > I file f1 ed l2 hanno lo stesso inode e stesso inode number > I file f1 ed h1 hanno lo stesso inode e stesso inode number > I file f1 ed l1 hanno lo stesso inode e stesso inode number
I file f1 ed h1 hanno lo stesso inode e stesso inode number
133
131. Quale delle seguenti affermazioni sulla variabile IFS è vera? > Deve contenere, come valore, un solo carattere, da usare per la separazione in parole nella bash (word splitting) > Contiene il carattere utilizzato per la separazione in token da awk > Cambiandone il valore, può cambiare l'esecuzione di un successivo ciclo for della bash > Nessuna delle altre opzioni è vera
Cambiandone il valore, può cambiare l'esecuzione di un successivo ciclo for della bash
134
132. Si supponga di avere il seguente frammento di codice: ``` int var = somefunction()%100; printf("%d\n%.2lf\n", var, (double)var); ``` dove somefunction ritorna un intero. Quale dei seguenti frammenti di codice scrive gli stessi caratteri sullo stdout, senza errori? > ```int var = somefunction()%100; char *buf; sprintf(buf, "%d", var); write(1, buf, strlen(buf)); write(1, "\n", 1); sprintf(buf, "%.2lf", (double)var); write(1, buf, strlen(buf)); write(1, "\n", 1);``` ^ ```int var = somefunction()%100; char buf[7]; sprintf(buf, "%d", var); write(1, buf, strlen(buf)); write(1, "\n", 1); sprintf(buf, "%.2lf", (double)var); write(1, buf, strlen(buf)); write(1, "\n", 1);``` >```int var = somefunction()%100; char *buf = (char *)calloc(sizeof(int), sizeof(char)); sprintf(buf, "%d", var); write(1, buf, strlen(buf)); write(1, "\n", 1); sprintf(buf, "%.2lf", (double)var); write(1, buf, strlen(buf)); write(1, "\n", 1); free(buf);``` > ```int var = somefunction()%100; double var2 = (double)var; write(1, (char *)&var, sizeof(var)); write(1, (char *)&var2, sizeof(var2));``
```int var = somefunction()%100; char buf[7]; sprintf(buf, "%d", var); write(1, buf, strlen(buf)); write(1, "\n", 1); sprintf(buf, "%.2lf", (double)var); write(1, buf, strlen(buf)); write(1, "\n", 1);```
135
133. Si consideri la riga di comando bash comando1 | comando2. Assumendo che comando1 e comando2 non contengano errori di sintassi, quale delle seguenti affermazioni è vera? > Comando2 viene eseguito solo se comando1 ha exit code diverso da 0 > Lo standard input di comando1 diventa lo standard output di comando2 > Comando2 viene eseguito solo se comando1 ha exit code uguale a 0 > Nessuna delle altre opzioni è vera
Nessuna delle altre opzioni è vera
136
134. Si consideri la riga di comando bash while condizione; do comando1; comando2; done. Assumendo che comando1 e comando2 non contengano errori di sintassi, quale delle seguenti affermazioni è vera? > Comando2 viene eseguito solo se comando1 non contiene errori di sintassi > Comando1 viene eseguito solo se condizione non contiene errori di sintassi > Comando2 viene eseguito solo se condizione non contiene errori di sintassi e comando1 non è exit > Nessuna delle altre opzioni è vera
Nessuna delle altre opzioni è vera