Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define _XOPEN_SOURCE 700
- #include <sys/types.h>
- #include <sys/stat.h>
- #include <unistd.h>
- #include <fcntl.h>
- #include <stdbool.h>
- #include <stdio.h>
- #include <stdlib.h>
- #include <errno.h>
- #include <string.h>
- #include <sys/wait.h>
- #define osAssert(cond) osError(cond, __LINE__)
- void osError(bool cond, int line);
- #define MAXSZ (256)
- #define MAX_BYTES (4096)
- #define RD_END (0)
- #define WR_END (1)
- int main(int argc, char** argv){
- osAssert(argc == 2);
- FILE* file;
- osAssert((file = fopen(argv[1], "r")) != NULL);
- char* program[2];
- program[0] = malloc(sizeof(char)*MAXSZ);
- program[1] = malloc(sizeof(char)*MAXSZ);
- int c2p[2];
- int errLog = open("errors.txt", O_WRONLY | O_CREAT | O_TRUNC, 0644);
- osAssert(errLog != -1);
- char buf[MAX_BYTES];
- while(fscanf(file, "%s %s", program[0], program[1]) == 2){
- osAssert(pipe(c2p) != -1);
- if(fork() == 0){
- close(c2p[RD_END]);
- close(errLog);
- dup2(c2p[WR_END], STDERR_FILENO);
- execlp(program[0], program[0], program[1], NULL);
- exit(EXIT_FAILURE);
- }
- close(c2p[WR_END]);
- int status;
- osAssert(wait(&status) != -1);
- int bytesRead;
- if(WEXITSTATUS(status) != EXIT_SUCCESS){
- osAssert((bytesRead = read(c2p[RD_END], buf, MAX_BYTES)) != -1);
- osAssert(write(errLog, buf, bytesRead) != -1);
- }
- close(c2p[RD_END]);
- }
- close(errLog);
- fclose(file);
- exit(EXIT_SUCCESS);
- }
- void osError(bool cond, int line){
- if(!cond){
- fprintf(stderr, "Greska na liniji %d", line);
- perror("Greska");
- exit(EXIT_FAILURE);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement