mirror of
https://git.FreeBSD.org/src.git
synced 2025-01-02 12:20:51 +00:00
Implement POSIX function tcgetsid() which returns session id.
PR: stand/107561
This commit is contained in:
parent
2f68261c81
commit
d61f3de656
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=178219
@ -63,7 +63,7 @@ MAN+= alarm.3 arc4random.3 \
|
||||
setjmp.3 setmode.3 setproctitle.3 \
|
||||
siginterrupt.3 signal.3 sigsetops.3 sleep.3 \
|
||||
statvfs.3 stringlist.3 \
|
||||
strtofflags.3 sysconf.3 sysctl.3 syslog.3 tcgetpgrp.3 \
|
||||
strtofflags.3 sysconf.3 sysctl.3 syslog.3 tcgetpgrp.3 tcgetsid.3 \
|
||||
tcsendbreak.3 tcsetattr.3 tcsetpgrp.3 time.3 times.3 timezone.3 \
|
||||
ttyname.3 tzset.3 ualarm.3 ucontext.3 ulimit.3 uname.3 \
|
||||
unvis.3 usleep.3 utime.3 valloc.3 vis.3 wordexp.3
|
||||
|
@ -337,6 +337,7 @@ FBSD_1.1 {
|
||||
fts_get_clientptr;
|
||||
fts_get_stream;
|
||||
fts_set_clientptr;
|
||||
tcgetsid;
|
||||
};
|
||||
|
||||
FBSDprivate_1.0 {
|
||||
|
71
lib/libc/gen/tcgetsid.3
Normal file
71
lib/libc/gen/tcgetsid.3
Normal file
@ -0,0 +1,71 @@
|
||||
.\" Copyright (c) 2008 David Xu <davidxu@freebsd.org>
|
||||
.\" All rights reserved.
|
||||
.\"
|
||||
.\" Redistribution and use in source and binary forms, with or without
|
||||
.\" modification, are permitted provided that the following conditions
|
||||
.\" are met:
|
||||
.\" 1. Redistributions of source code must retain the above copyright
|
||||
.\" notice, this list of conditions and the following disclaimer.
|
||||
.\" 2. Redistributions in binary form must reproduce the above copyright
|
||||
.\" notice, this list of conditions and the following disclaimer in the
|
||||
.\" documentation and/or other materials provided with the distribution.
|
||||
.\"
|
||||
.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||
.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||
.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
.\" SUCH DAMAGE.
|
||||
.\"
|
||||
.\" $FreeBSD$
|
||||
.\"
|
||||
.Dd April 15, 2008
|
||||
.Dt TCGETSID 3
|
||||
.Os
|
||||
.Sh NAME
|
||||
.Nm tcgetsid
|
||||
.Nd get session ID associated with a controlling terminal
|
||||
.Sh LIBRARY
|
||||
.Lb libc
|
||||
.Sh SYNOPSIS
|
||||
.In sys/types.h
|
||||
.In termios.h
|
||||
.Ft pid_t
|
||||
.Fn tcgetsid "int fd"
|
||||
.Sh DESCRIPTION
|
||||
The
|
||||
.Fn tcgetsid
|
||||
function returns the process group ID of the session leader for a
|
||||
controlling terminal specified by
|
||||
.Fa fd .
|
||||
.Sh ERRORS
|
||||
If an error occurs,
|
||||
.Fn tcgetsid
|
||||
returns -1 and the global variable
|
||||
.Va errno
|
||||
is set to indicate the error, as follows:
|
||||
.Bl -tag -width Er
|
||||
.It Bq Er EBADF
|
||||
The
|
||||
.Fa fd
|
||||
argument is not a valid file descriptor.
|
||||
.It Bq Er ENOTTY
|
||||
The calling process does not have a controlling terminal or the
|
||||
underlying terminal device represented by
|
||||
.Fa fd
|
||||
is not the controlling terminal.
|
||||
.El
|
||||
.Sh SEE ALSO
|
||||
.Xr getsid 2 ,
|
||||
.Xr setsid 2 ,
|
||||
.Xr tcgetpgrp 3
|
||||
.Sh STANDARDS
|
||||
The
|
||||
.Fn tcgetsid
|
||||
function conforms to
|
||||
.St -xpg4.2 .
|
@ -99,6 +99,17 @@ tcgetpgrp(fd)
|
||||
return ((pid_t)s);
|
||||
}
|
||||
|
||||
pid_t
|
||||
tcgetsid(int fd)
|
||||
{
|
||||
int s;
|
||||
|
||||
if (_ioctl(fd, TIOCGSID, &s) < 0)
|
||||
return ((pid_t)-1);
|
||||
|
||||
return ((pid_t)s);
|
||||
}
|
||||
|
||||
speed_t
|
||||
cfgetospeed(t)
|
||||
const struct termios *t;
|
||||
|
@ -1010,6 +1010,11 @@ ttioctl(struct tty *tp, u_long cmd, void *data, int flag)
|
||||
return (ENOTTY);
|
||||
*(int *)data = tp->t_pgrp ? tp->t_pgrp->pg_id : NO_PID;
|
||||
break;
|
||||
case TIOCGSID: /* get sid of tty */
|
||||
if (!isctty(p, tp))
|
||||
return (ENOTTY);
|
||||
*(int *)data = tp->t_session->s_sid;
|
||||
break;
|
||||
#ifdef TIOCHPCL
|
||||
case TIOCHPCL: /* hang up on last close */
|
||||
s = spltty();
|
||||
|
@ -118,7 +118,7 @@ struct winsize {
|
||||
#define TIOCSTAT _IO('t', 101) /* simulate ^T status message */
|
||||
#define UIOCCMD(n) _IO('u', n) /* usr cntl op "n" */
|
||||
/* 100 see consio.h */
|
||||
/* 99 obsolete or unused */
|
||||
#define TIOCGSID _IOR('t', 99, int) /* get session id */
|
||||
#define TIOCCONS _IOW('t', 98, int) /* become virtual console */
|
||||
#define TIOCSCTTY _IO('t', 97) /* become controlling tty */
|
||||
/* 97-90 tun; some conflicts */
|
||||
|
Loading…
Reference in New Issue
Block a user