c - Using dup2 from file to another file -
i'm trying execute command sort < in.txt > out.txt, using dup2. code:
int fdin = open("in.txt",o_rdwr); int fdout = open("out.txt",o_rdwr); dup2(fdin,fdout); //close(fdin); //close(fdout); //execvp... how dup2 work? can't it... thank you!
the way use closes fdout again, removing connection fdout, , connects fdin. if fdin , fdout are, maybe, 4 , 5, both 4 , 5 point in.txt.
rather that, should
dup2(fdin, 0) // 0 point same fdin dup2(fdout, 1) // 1 point same fdout close(fdin); // don't need these longer - if not 0 or 1! should checked. close(fdout); execvp(...); there other pitfalls taken care for, however. example, should fork() before 1 if want process go on does.
why comment @ close() above? well, when process hasn't fd 0 and/or 1 open (what unusual, not impossible), fdin might 0 or 1 , fdout might 1. these situations have cope with.
an better way be
if (fdin > 0) { dup2(fdin, 0); // 0 point same fdin close(fdin); } if (fdout > 1) { // cannot 0! dup2(fdout, 1) // 1 point same fdout close(fdout); } execvp(...);
Comments
Post a Comment