Fwd: undefined reference to `ioctl_tty'

Alexander Kapshuk alexander.kapshuk at gmail.com
Wed Mar 6 02:31:02 EST 2019


---------- Forwarded message ---------
From: Alexander Kapshuk <alexander.kapshuk at gmail.com>
Date: Wed, Mar 6, 2019 at 9:30 AM
Subject: Re: undefined reference to `ioctl_tty'
To: <noloader at gmail.com>


On Wed, Mar 6, 2019 at 9:00 AM Jeffrey Walton <noloader at gmail.com> wrote:
>
> Hi Everyone,
>
> I'm working from http://man7.org/linux/man-pages/man4/tty_ioctl.4.html
> . According to the man page:
>
>        TIOCEXCL  void
>               Put the terminal into exclusive mode.  No further open(2)
>               operations on the terminal are permitted.  (They fail with
>               EBUSY, except for a process with the CAP_SYS_ADMIN
>               capability.)
>
> The page goes on to say in the colophon it is part of the 4.16 kernel.
> I am running on the 4.20 kernel:
>
> $ uname -a
> Linux silo 4.20.13-200.fc29.x86_64 #1 ... GNU/Linux
>
> However:
>
> gcc -D_GNU_SOURCE -g2 -std=gnu99 test.c -o tttt -lrt
> test.c: In function ‘main’:
> test.c:11:7: warning: implicit declaration of function ‘ioctl_tty’;
> did you mean ‘ioctl’? [-Wimplicit-function-declaration]
>    if (ioctl_tty(1 /*STDOUT_FILENO*/, TIOCEXCL, NULL) == -1) {
>        ^~~~~~~~~
>        ioctl
> /usr/bin/ld: /tmp/ccCNNyG3.o: in function `main':
> /home/test/test.c:11: undefined reference to `ioctl_tty'
> collect2: error: ld returned 1 exit status
>
> Search is producing a lot of non-relevant hits.
>
> Any ideas why I can't find ioctl_tty during link when using a 4.20 kernel?
>
> Thanks in advance.
>
> ----------
>
> $ cat test.c
> #include <stdio.h>
> #include <string.h>
> #include <errno.h>
> #include <termios.h>
> #include <fcntl.h>
> #include <sys/ioctl.h>
>
> int main(int argc, char* argv[])
> {
>   if (ioctl_tty(1 /*STDOUT_FILENO*/, TIOCEXCL, NULL) == -1) {
>     fprintf(stderr, "%s\n", strerror(errno));
>     return 1;
>   }
>   return 0;
> }
>
> _______________________________________________
> Kernelnewbies mailing list
> Kernelnewbies at kernelnewbies.org
> https://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies

While the man page does refer to this function as ioctl_tty, the
actual signature, as shown in the man page, is:
int ioctl(int fd, int cmd, ...);

Not ioctl_tty.

The example section of the man pages gives this usage example:

fd = open("/dev/ttyS0", O_RDONLY);
           ioctl(fd, TIOCMGET, &serial);

Hope this helps.



More information about the Kernelnewbies mailing list