mirror of
https://github.com/cirosantilli/linux-kernel-module-cheat.git
synced 2026-01-23 10:15:57 +01:00
ioctl: move doc to README
This commit is contained in:
@@ -1,3 +1,5 @@
|
||||
/* https://github.com/cirosantilli/linux-kernel-module-cheat#ioctl */
|
||||
|
||||
#define _GNU_SOURCE
|
||||
#include <errno.h>
|
||||
#include <fcntl.h>
|
||||
@@ -12,43 +14,53 @@
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
int fd, arg_int, ret;
|
||||
char *ioctl_path;
|
||||
int fd, request, arg0, arg1, arg_int, ret;
|
||||
lkmc_ioctl_struct arg_struct;
|
||||
|
||||
if (argc < 2) {
|
||||
puts("Usage: ./prog <ioctl-file>");
|
||||
puts("Usage: ./prog <ioctl-file> <request> [<arg>...]");
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
fd = open(argv[1], O_RDONLY);
|
||||
ioctl_path = argv[1];
|
||||
request = strtol(argv[2], NULL, 10);
|
||||
if (argc > 3) {
|
||||
arg0 = strtol(argv[3], NULL, 10);
|
||||
}
|
||||
if (argc > 4) {
|
||||
arg1 = strtol(argv[4], NULL, 10);
|
||||
}
|
||||
|
||||
fd = open(ioctl_path, O_RDONLY);
|
||||
if (fd == -1) {
|
||||
perror("open");
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
/* 0 */
|
||||
switch (request)
|
||||
{
|
||||
arg_int = 1;
|
||||
ret = ioctl(fd, LKMC_IOCTL_INC, &arg_int);
|
||||
if (ret == -1) {
|
||||
perror("ioctl");
|
||||
case 0:
|
||||
arg_int = arg0;
|
||||
ret = ioctl(fd, LKMC_IOCTL_INC, &arg_int);
|
||||
if (ret != -1) {
|
||||
printf("%d\n", arg_int);
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
arg_struct.i = arg0;
|
||||
arg_struct.j = arg1;
|
||||
ret = ioctl(fd, LKMC_IOCTL_INC_DEC, &arg_struct);
|
||||
if (ret != -1) {
|
||||
printf("%d %d\n", arg_struct.i, arg_struct.j);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
puts("error: unknown request");
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
printf("arg = %d\n", arg_int);
|
||||
printf("ret = %d\n", ret);
|
||||
printf("errno = %d\n", errno);
|
||||
}
|
||||
puts("");
|
||||
/* 1 */
|
||||
{
|
||||
arg_struct.i = 1;
|
||||
arg_struct.j = 1;
|
||||
ret = ioctl(fd, LKMC_IOCTL_INC_DEC, &arg_struct);
|
||||
if (ret == -1) {
|
||||
perror("ioctl");
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
printf("arg = %d %d\n", arg_struct.i, arg_struct.j);
|
||||
printf("ret = %d\n", ret);
|
||||
if (ret == -1) {
|
||||
perror("ioctl");
|
||||
printf("errno = %d\n", errno);
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
close(fd);
|
||||
return EXIT_SUCCESS;
|
||||
|
||||
Reference in New Issue
Block a user