tty_open(9)
π tty_open(9) β Kernel API Manual β¨
okay so bestie, buckle up, because this is the tea on tty_open from the kernel API manual. it's a kernel function, it's iconic, and it's about to open a tty device for you. let's get into it π
β¨ NAME β¨
tty_open β open a tty device π¦
πΈ SYNOPSIS πΈ
int tty_open (struct inode *inode , struct file *filp );
π ARGUMENTS π
inodeβ the inode of the device file, aka the little ID card for the thing you're opening πͺͺfilpβ the file pointer to the tty, the actual handle you get to hold π«Ά
π₯ DESCRIPTION π₯
so here's the vibe: tty_open and tty_release are the two besties that keep up the tty count, and that count holds the number of opens that have been done on a tty. lowkey important. the reason they can't just use the inode-count is that different inodes might point to the same tty β and then your count would be a whole lie. π not slay.
open-counting is needed for pty masters, and it's also how serial lines are kept track of: DTR is dropped when the last close happens. that's the rule, no cap. (and just so you know β this is not done solely through tty->count, now. β Ted 1/27/92 π)
the termios state of a pty gets reset on the first open, so that settings don't persist across reuse. clean slate energy, we love to see it β
π Locking (the part where you pay attention)
tty_mutexprotectstty,tty_lookup_driverandtty_init_dev. πtty->countshould protect the rest.->siglockprotects->signal/->sighand
β οΈ NOTE β οΈ
thetty_unlock/lockcases without a ref are only safe due totty_mutexπ like, that's the only thing holding it together, bestie. respect the mutex.
π§ SEE ALSO π§
Kernel file ./drivers/tty/tty_io.c β and the whole extended friend group:
free_tty_struct(9),tty_free_file(9),tty_name(9)get_tty_driver(9),tty_dev_name_to_number(9),tty_find_polling_driver(9)tty_wakeup(9),tty_release_redirect(9),__tty_hangup(9)tty_hangup(9),tty_vhangup(9),tty_vhangup_self(9)tty_vhangup_session(9),tty_hung_up_p(9),stop_tty(9)start_tty(9),tty_read(9),tty_write(9)tty_send_xchar(9),pty_line_name(9),tty_line_name(9)tty_driver_lookup_tty(9),tty_init_termios(9),tty_standard_install(9)tty_driver_install_tty(9),tty_driver_remove_tty(9),tty_reopen(9)tty_init_dev(9),tty_save_termios(9),tty_flush_works(9)release_one_tty(9),tty_kref_put(9),release_tty(9)tty_release_checks(9),tty_kclose(9),tty_release_struct(9)tty_release(9),tty_open_current_tty(9),tty_lookup_driver(9)tty_kopen_exclusive(9),tty_kopen_shared(9),tty_open_by_driver(9)tty_poll(9),tiocsti(9),tiocgwinsz(9)tty_do_resize(9),tiocswinsz(9),tioccons(9)tiocsetd(9),tiocgetd(9),send_break(9)tty_get_tiocm(9),tty_tiocmget(9),tty_tiocmset(9)tty_get_icount(9),alloc_tty_struct(9),tty_put_char(9)tty_register_device(9),tty_register_device_attr(9),tty_unregister_device(9)__tty_alloc_driver(9),tty_driver_kref_put(9),tty_register_driver(9)tty_unregister_driver(9)
and that's the whole page, bestie π this one came out of ./drivers/tty, dated October 2026, and it's filed under tty_open(9) β go forth and open ttys responsibly, ily ππΈ
π¦ where this page comes from
- nixpkgs unstable: linux-manual 7.3.1
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms