c - trying to redirect input and output using system calls -
i'm trying read input specific file , write specific file using unix(sys calls). output part must somehow created.
i want following: ./a.out < input.txt > output.txt using these functions: fork,dup.dup2,exec,open,write,read code :
pid_t pid, runner; char *path = argv[1]; char enter[] = "/home/demo/desktop/os/ex1/ex12/code/input.txt"; char to[] = "/home/demo/desktop/os/ex1/ex12/ex1/ronen/"; char *out = "/home/demo/desktop/os/ex1/ex12/ex1/ronen/out1.txt"; char *args[] = {to, "./a.out","<",enter,">",out, null}; char *args2[] = {"cd", to, "./a.out","<",enter,">",to ,null}; if ((runner = fork()) < 0) {perror("could not make fork");} else if (runner == 0) { printf("true\n"); execvp(args2[0],args2); } else if (runner != 0) { waitpid(runner,0,0); printf("done\n"); }
so it's actaully working when put "a.out" file in desktop.
however has know how can redirect exec function go spefic folder? won't have pass executable file desktop?
for reading , writing files, use normal read
, write
functions; you'll need have file descriptor first, you'll need use fopen
.
all in all, every c tutorial i've ever seen covers opening , writing long before touches fork
, wonder you've been following. i'd recommend finding intro c , read first few pages; if understand fork
does, piece of cake you.
edit: also, might misunderstand
program arguments <from_file >to_file
does when using on shell:
the shell reads line, , calls program
, passing arguments
as... arguments. detects <
, >
on line , "bends" standard input , output file descriptors (yes, standard input , output behave that), fopen
ed files.
program
never sees <from_file
nor >to_file
.
edit in comment say:
i can not use fopen , functions. .fork,dup.dup2,exec,open,write,read
obviously, fopen
wrapper open
, returns file descriptor open
returns.
also, program uses plenty libc functions; if you'd allowed write
, shouldn't use printf
, handy formatting wrapper puts
, wrapper write
. similar things apply all functions call, ie. waitpid
, execvp
, perror
. should document requirements for yourself, first.
Comments
Post a Comment