Systemprogrammering, 5p 18 Mars 1994
· Skrivtid 16 - 22
· Hjälpmedel: Kelley and Pohl. A Book on C.
· Maxpoäng 52 p (för godkänt krävs 32 p)
· Uppgifterna är slumpmässigt ordnade
· Fråga om någonting är oklart
För varje uppgift i denna tentamen.
a) Börja uppgiften på ett nytt blad och skriv namn och uppgiftsnummer längst upp till höger på bladet.
b) Använd endast en sida på varje blad.
Beskriv vad som händer när följande kommando exekveras.
% grep PAT < fil1 | sort > fil2
Hur startas processer och program? När, och av vilken process skapas pipor. Hur hanteras omdirigering etc. Beskriv utförligt och rita gärna figurer.
Konstruera en C-funktion, execute(), som exekverar program. Anropsytan för execute ska vara:
int execute(char *command, char **argv)
där command är namnet på programmet som ska exekveras och argv är en array av strängar som är argument till programmet. argv ska avslutas med en NULL-pekare så att den passar till exec-anropen. Använd fork() och någon variant av exec() för att starta en ny process respektive för att exekvera programmet.
Execute ska returnera 0 om allt gick bra och -1 om något gick fel. Om något gick fel ska den anropande rutinen kunna använda errno och perror för att ta hand om felet.
Vad skrivs ut av följande C-program ?
struct { char *s1; char *s2; char *s3; char *s4; } sune = {"ENTER", "NEW", "POINT", "FIRST"}; char **sp[] = {&sune.s4, &sune.s3, &sune.s2, &sune.s1}; char ***spp = sp; main() { printf("%s ", *(&sune.s1 + 1)); printf("%s", *spp[1] + 2); sp[2] = (++spp)[2]; printf("%s", **(spp + 2) + 3); printf("VI%s\n", sune.s2 + 1); }
% find options directorydär directory är startdirectory och options kan vara följande:
-n namepattern -p -x commandProgrammet ska börja sin sökning i directory och rekursivt söka sig ner i directoryhierarkien och leta efter filer som matchar det reguljära uttrycket namepattern. För varje fil som den hittar ska den om "-p"-optionen är angiven skriva ut namnet på filen (hela pathen med start i direc- tory). Om "-x"-optionen är angiven ska programmet utföra kommandot command på filen.
D v s:
command filenameObservera att både "-n" och "-x"-opionerna kan vara givna samtidigt, men att endast en "-x"- option får förekomma.
Exempel:
% find -n '*.c' -print .skriver ut alla filer som slutar på .c med start i working directory.
% find -n core -x rm ~Tar bort alla core-filer som ligger i home directoriet eller under.
Använd getopt() för att hantera optioner och argument, opendir(), readdir() etc för att läsa igenom directoryn och execute() från Uppgift 3 för att utföra kommandot com- mand. Du får även anta att det finns en funktion regmatch(char *pattern, char *string) som utför matchning med reguljära uttryck. regmatch returnerar 1 om strängen string matchar det reguljära uttrycket pattern och 0 om den inte matchar.