~~Exercise.#~~
#include
#include
int main(void) {
execlp("ps", "ps", "-F", NULL);
perror("execvp");
return -1;
}
~~Exercise.#~~
#include
#include
#include
int main(int argc, char *argv[]) {
char **av = malloc(sizeof(char *) * (argc + 4));
char a0[] = "ls"; av[0] = a0;
char a1[] = "-l"; av[1] = a1;
char a2[] = "-t"; av[2] = a2;
char a3[] = "-r"; av[3] = a3;
for (int i = 0; i < argc; ++i)
av[i + 4] = argv[i + 1];
execvp("ls", av);
perror("execvp");
return -1;
}
~~Exercise.#~~
#include
#include
#include
#include
int main(int argc, char *argv[]) {
struct timespec start, end;
timespec_get(&start, TIME_UTC);
if (!fork()) {
execvp(argv[1], argv + 1);
perror("execvp");
return -1;
}
wait(NULL);
timespec_get(&end, TIME_UTC);
double elapsedSec = (end.tv_sec - start.tv_sec) + (end.tv_nsec - start.tv_nsec) / 1e9;
printf("%f\n", elapsedSec);
return 0;
}
~~Exercise.#~~
#include
#include
#include
#include
#include
int main(int argc, char *argv[]) {
struct timespec start, end;
timespec_get(&start, TIME_UTC);
if (!fork()) {
execvp(argv[1], argv + 1);
perror("execvp");
return -1;
}
close(0);
close(1);
int status;
wait(&status);
timespec_get(&end, TIME_UTC);
double elapsedSec = (end.tv_sec - start.tv_sec) + (end.tv_nsec - start.tv_nsec) / 1e9;
if (WIFEXITED(status)) {
// You may test exit status by compiling & using the following program:
// main(int,char**v){return atoi(v[1]);}
fprintf(stderr, "%f (returned %d)\n", elapsedSec, WEXITSTATUS(status));
} else {
assert(WIFSIGNALED(status));
fprintf(stderr, "%f (killed by signal %d)\n", elapsedSec, WTERMSIG(status));
}
return 0;
}
~~Exercise.#~~
#include
#include
#include
int main() {
int fd = open("output", O_WRONLY | O_TRUNC | O_CREAT, 0666);
if (fd == -1) {
perror("output");
return 1;
}
dup2(fd, 1);
close(fd);
execlp("ps", "ps", "-F", NULL);
return 1;
}
~~Exercise.#~~
#include
#include
#include
int main(int argc, char **argv) {
if (argc < 2) {
write(2, "Too few arguments\n", 18);
return 1;
}
int fd = open(argv[1], O_RDONLY);
if (fd == -1) {
perror(argv[1]);
return 1;
}
dup2(fd, 0);
close(fd);
argv[1] = "tr";
execvp("tr", argv + 1);
return 1;
}
~~Exercise.#~~
#include
#include
#include
#include
int main() {
int fileFd = open("file", O_WRONLY | O_CREAT | O_TRUNC, 0666);
if (fileFd == -1) {
perror("file");
return 1;
}
int errorFd = dup(2);
errno = ELOOP;
perror("ELOOP");
dup2(fileFd, 2);
perror("ELOOP");
errno = EMFILE;
dup2(errorFd, 2);
perror("EMFILE");
dup2(fileFd, 2);
perror("EMFILE");
close(errorFd);
close(fileFd);
return 1;
}
~~META:
language = en
~~