How are the standard file descriptors implemented?

linux lover caprianking2002 at gmail.com
Wed Oct 7 23:01:37 EDT 2020


Thanks a million for... !

Sent from my iPhone

> On Oct 7, 2020, at 2:11 PM, Sebastian Fricke <sebastian.fricke.linux at gmail.com> wrote:
> 
> Hello,
> 
> after my current research on that topic, I fear that my question is
> probably way too broad and unspecific, as there seem to be multiple
> viable ways, so I try to narrow it down.
> First of what is my motivation?
> I try to implement these standard file descriptors within a practice
> operating system, in order to get file-system specific system calls like
> open, read, write and close to work.
> 
> What I currently (believe to) know:
> - The standard file descriptors are an abstraction layer in between an
> output device like a monitor and an input device like a keyboard. In
> the old days, these were configured directly to the terminals.
> - In glibc (https://github.com/bminor/glibc/blob/master/libio/stdfiles.c),
> they are defined there as FILE struct instances that associate to the
> specific file descriptors.
> - I can locate the file descriptors of a specific process within Linux
> under: /proc/{process_id}/fd/{0,1,2}
>   root at basti:/proc/self# ls -l fd
>   total 0
>   lrwx------ 1 root root 64 Oct  7 07:54 0 -> /dev/pts/4
>   lrwx------ 1 root root 64 Oct  7 07:54 1 -> /dev/pts/4
>   lrwx------ 1 root root 64 Oct  7 07:54 2 -> /dev/pts/4
>   lrwx------ 1 root root 64 Oct  7 07:54 255 -> /dev/pts/4
> 
> they all point to /dev/pts/4, if I look in the /dev/pts directory:
> 
>   root at basti:/dev/pts# ls -l
>   total 0
>   crw--w---- 1 basti        tty  136, 0 Oct  7 07:53 0
>   crw--w---- 1 basti        tty  136, 1 Oct  6 20:59 1
>   crw--w---- 1 libvirt-qemu tty  136, 2 Oct  4 16:27 2
>   crw--w---- 1 basti        tty  136, 3 Oct  7 07:56 3
>   crw------- 1 basti        tty  136, 4 Oct  7 07:56 4
>   c--------- 1 root         root   5, 2 Oct  4 12:10 ptmx
> 
> Here I can see that they all point to a character device, with the
> group tty. And I know that /dev/pts/4 is a pseudeo teletype, which is
> a slave of the ptmx multiplexor.
> 
> The gaps I currently have:
> - Who creates that device /dev/pts/4 ? I was currently not able to
> locate this information.
> - How is that device connected to my keyboard/monitor?
> - Could I maybe create a simplified version, which just utilizes a file
> for STDIN, STDOUT, STDERR. That are created by the init process and
> inherited to all child processes? Maybe I could then redirect the
> keyboard output to the STDIN file, the STDOUT file to the monitor
> device etc.
> 
> Thanks in advance for any help!
> 
> Greetings
> Sebastian
> 
> 
> _______________________________________________
> Kernelnewbies mailing list
> Kernelnewbies at kernelnewbies.org
> https://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies



More information about the Kernelnewbies mailing list