undefined reference to `ioctl_tty'

Jeffrey Walton noloader at gmail.com
Wed Mar 6 01:58:41 EST 2019


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;
}



More information about the Kernelnewbies mailing list