vtallow.c - ubase - suckless linux base utils | |
git clone git://git.suckless.org/ubase | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
vtallow.c (901B) | |
--- | |
1 /* See LICENSE file for copyright and license details. */ | |
2 #include <sys/types.h> | |
3 #include <sys/stat.h> | |
4 #include <sys/ioctl.h> | |
5 | |
6 #include <fcntl.h> | |
7 #include <stdio.h> | |
8 #include <string.h> | |
9 #include <unistd.h> | |
10 | |
11 #include "util.h" | |
12 | |
13 #define CONSOLE "/dev/console" | |
14 | |
15 #define VT_LOCKSWITCH 0x560B /* disallow vt switching */ | |
16 #define VT_UNLOCKSWITCH 0x560C /* allow vt switching */ | |
17 | |
18 static void | |
19 usage(void) | |
20 { | |
21 eprintf("usage: %s n | y\n", argv0); | |
22 } | |
23 | |
24 int | |
25 main(int argc, char *argv[]) | |
26 { | |
27 int fd; | |
28 int allow; | |
29 | |
30 ARGBEGIN { | |
31 default: | |
32 usage(); | |
33 } ARGEND; | |
34 | |
35 if (argc != 1) | |
36 usage(); | |
37 | |
38 if (!strcmp(argv[0], "y")) | |
39 allow = 1; | |
40 else if (!strcmp(argv[0], "n")) | |
41 allow = 0; | |
42 else | |
43 usage(); | |
44 | |
45 if ((fd = open(CONSOLE, O_WRONLY)) < 0) | |
46 eprintf("open %s:", CONSOLE); | |
47 if (ioctl(fd, allow ? VT_UNLOCKSWITCH : VT_LOCKSWITCH) < 0) | |
48 eprintf("cannot %s VT switch:", | |
49 allow ? "unlock" : "lock"); | |
50 close(fd); | |
51 return 0; | |
52 } |