View Single Post
Old 13-04-2010, 14:53   #1
Fabietto206
Senior Member
 
L'Avatar di Fabietto206
 
Iscritto dal: Jul 2007
Città: Cassano M.go (Va)
Messaggi: 631
[C] Esercizio Sistemi Operativi: qualcuno sa dirmi se lo svolto correttamente?

Testo del progetto
Quote:
Si scriva un programma C equivalente al comando di shell “cat /etc/passwd | grep ot > /tmp/foo 2>&1”, utilizzando le chiamate di sistema di Unix.
Ecco la mia soluzione:
Codice:
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/wait.h>

void fail(char *message) {
perror(message);
exit(1);
}
int main() {
int fd[2];
if (-1 == pipe(fd))
fail("pipe");
if (0 == fork()) {
close(0);
close(1);
if (0 != open("/etc/passwd", O_RDONLY))
fail("open passwd");
if (1 != dup(fd[1]))
fail("dup left");
close(fd[0]);
close(fd[1]);
execlp("cat", "cat", NULL);
fail("exec cat");
} else {
close(0);
close(2);
if (0 != dup(fd[0]))
fail("dup right");
if (2 != open("/tmp/foo", O_WRONLY | O_APPEND | O_CREAT, 0600))
fail("open foo");
close(fd[0]);
close(fd[1]);
execlp("grep", "grep", "-H", "root", NULL);
fail("exec grep");
}
return 0;
}
__________________
PC: Intel Core i5 4690K @ 3,5 Ghz | VGA Gigabyte GTX 970 G1 Gaming | RAM G Skill Ares 1866 Mhz (2x4GB) | HDD WD Caviar Blue 1TB | SSD Samsung 840 Evo 250GB | MoBo AsRock Z97 Extreme 4 Router: Netgear dg834g v5 Notebook: Asus x53sv: Intel i7 2630qm | Geforce gt630 | RAM 4GB | SSD 250GB Cell: Iphone 8 64GB Black Tablet: Ipad Air 16GB + 4G Grigio siderale
Fabietto206 è offline   Rispondi citando il messaggio o parte di esso