---------- Forwarded message --------- From: Alexander Kapshuk <alexander.kapshuk@xxxxxxxxx> Date: Wed, Mar 6, 2019 at 9:30 AM Subject: Re: undefined reference to `ioctl_tty' To: <noloader@xxxxxxxxx> On Wed, Mar 6, 2019 at 9:00 AM Jeffrey Walton <noloader@xxxxxxxxx> 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@xxxxxxxxxxxxxxxxx > 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. _______________________________________________ Kernelnewbies mailing list Kernelnewbies@xxxxxxxxxxxxxxxxx https://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies