Changes

Jump to navigation Jump to search
no edit summary
Line 23: Line 23:  
fd = open_a_file(fd->file);
 
fd = open_a_file(fd->file);
 
dup2(fd, fd->tgt_fd);
 
dup2(fd, fd->tgt_fd);
 +
close(fd);
 +
</pre>
 +
 +
Now let's remember, that a file can be opened multiple times in one task, this is happens when you e.g. start a shell. One of the <code>/dev/tty</code> or alike files will sit under 0, 1 and 2 descriptors. Not a big deal, we just expand the <code>struct fd</code>
 +
 +
<pre>
 +
struct fd {
 +
struct file *file;
 +
int n_fds;
 +
int *tgt_fds;
 +
} *fd;
 +
</pre>
 +
 +
and the code itself:
 +
 +
<pre>
 +
int fd, i;
 +
 +
fd = open_a_file(fd->file);
 +
for (i = 0; i < fd->n_fds; i++)
 +
dup2(fd, fd->tgt_fds[i]);
 
close(fd);
 
close(fd);
 
</pre>
 
</pre>
    
[[Category:Under the hood]]
 
[[Category:Under the hood]]

Navigation menu