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