diff options
author | ed <ed@FreeBSD.org> | 2009-05-07 13:49:48 +0000 |
---|---|---|
committer | ed <ed@FreeBSD.org> | 2009-05-07 13:49:48 +0000 |
commit | f8170e41fe131d129edab0370716adf666f67cea (patch) | |
tree | 20c0656b6a881111e7bd254adf5f19151c541199 /lib/libc/gen/termios.c | |
parent | e0ce6b415e3db13761dcef8945261fbfb00cde10 (diff) | |
download | FreeBSD-src-f8170e41fe131d129edab0370716adf666f67cea.zip FreeBSD-src-f8170e41fe131d129edab0370716adf666f67cea.tar.gz |
Add tcsetsid(3).
The entire world seems to use the non-standard TIOCSCTTY ioctl to make a
TTY a controlling terminal of a session. Even though tcsetsid(3) is also
non-standard, I think it's a lot better to use in our own source code,
mainly because it's similar to tcsetpgrp(), tcgetpgrp() and tcgetsid().
I stole the idea from QNX. They do it the other way around; their
TIOCSCTTY is just a wrapper around tcsetsid(). tcsetsid() then calls
into an IPC framework.
Diffstat (limited to 'lib/libc/gen/termios.c')
-rw-r--r-- | lib/libc/gen/termios.c | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/lib/libc/gen/termios.c b/lib/libc/gen/termios.c index 4c6dcff..85ca4e3 100644 --- a/lib/libc/gen/termios.c +++ b/lib/libc/gen/termios.c @@ -110,6 +110,18 @@ tcgetsid(int fd) return ((pid_t)s); } +int +tcsetsid(int fd, pid_t pid) +{ + + if (pid != getsid(0)) { + errno = EINVAL; + return (-1); + } + + return (_ioctl(fd, TIOCSCTTY, NULL)); +} + speed_t cfgetospeed(t) const struct termios *t; |