Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <stdint.h>
- #include <string.h>
- #include <stdbool.h>
- #include <errno.h>
- #include <semaphore.h>
- #include <time.h>
- #include <sys/types.h>
- #include <sys/wait.h>
- #include <unistd.h>
- #define osAssert(cond, msg) osErrorFatal(cond, msg, __FILE__, __LINE__)
- void osErrorFatal(bool cond, const char* msg, const char* file, int line)
- {
- if(!cond)
- {
- perror(msg);
- fprintf(stderr,"%s:%d\n", file,line);
- exit(EXIT_FAILURE);
- }
- }
- int main(int argc, char** argv)
- {
- osAssert(argc > 1 , "wrong number of args");
- int nFiles = argc-1;
- const char* cmd = "du\0";
- const char* arg1 = "-sch\0";
- for(int i = 0; i < nFiles; i++)
- {
- int pipeFds[2];
- osAssert(-1 != pipe(pipeFds), "pipe failed");
- const char* arg2 = argv[i+1];
- pid_t childPid = fork();
- if(childPid == 0)
- {
- close(pipeFds[0]);
- osAssert(-1 != dup2(pipeFds[1], STDOUT_FILENO), "dup2 failed");
- osAssert(-1 != execlp(cmd,cmd,arg1,arg2,NULL), "exec failed");
- }
- else
- {
- close(pipeFds[1]);
- int wstatus;
- osAssert(-1 != waitpid(childPid, &wstatus, 0), "wait failed");
- if(WIFEXITED(wstatus))
- {
- if(WEXITSTATUS(wstatus) != EXIT_SUCCESS)
- {
- printf("neuspeh ");
- continue;
- }
- }
- FILE *fp = fdopen(pipeFds[0], "r");
- osAssert(NULL != fp, "fdopen failed");
- char velicina[256];
- osAssert(1 == fscanf(fp,"%s",velicina),"fscanf failed");
- printf("%s ",velicina);
- fclose(fp);
- close(pipeFds[0]);
- }
- }
- printf("\n");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement