---------- Forwarded message --------- From: Alexander Kapshuk <alexander.kapshuk@gmail.com> Date: Wed, Mar 6, 2019 at 9:30 AM Subject: Re: undefined reference to `ioctl_tty' To: <noloader@gmail.com> On Wed, Mar 6, 2019 at 9:00 AM Jeffrey Walton <noloader@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@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.