From ecfa5263ab5b19a58d53a7116fb079f3b956b918 Mon Sep 17 00:00:00 2001 From: Miklos Szeredi Date: Fri, 5 Dec 2008 10:55:36 +0000 Subject: * Implement ioctl support. On high level interface only "restricted" ioctls are supported (which are defined with the _IO(), _IOR(), _IOW() or _IOWR() macros). Unrestricted ioctls will only be allwed to CUSE (Character Device in Userspace) servers. Patch by Tejun Heo --- example/fioclient.c | 66 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 example/fioclient.c (limited to 'example/fioclient.c') diff --git a/example/fioclient.c b/example/fioclient.c new file mode 100644 index 0000000..3ab63b2 --- /dev/null +++ b/example/fioclient.c @@ -0,0 +1,66 @@ +/* + FUSE fioclient: FUSE ioctl example client + Copyright (C) 2008 SUSE Linux Products GmbH + Copyright (C) 2008 Tejun Heo + + This program can be distributed under the terms of the GNU GPL. + See the file COPYING. + + gcc -Wall fioclient.c -o fioclient +*/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include "fioc.h" + +const char *usage = +"Usage: fioclient FIOC_FILE [SIZE]\n" +"\n" +" get size if SIZE is omitted, set size otherwise\n" +"\n"; + +int main(int argc, char **argv) +{ + size_t size; + int fd; + + if (argc < 2) { + goto usage; + } + + fd = open(argv[1], O_RDWR); + if (fd < 0) { + perror("open"); + return 1; + } + + if (argc == 2) { + if (ioctl(fd, FIOC_GET_SIZE, &size)) { + perror("ioctl"); + return 1; + } + printf("%zu\n", size); + } else { + char *endp; + + size = strtoul(argv[2], &endp, 0); + if (endp == argv[2] || *endp != '\0') + goto usage; + + if (ioctl(fd, FIOC_SET_SIZE, &size)) { + perror("ioctl"); + return 1; + } + } + return 0; + +usage: + fprintf(stderr, usage); + return 1; +} -- cgit v1.2.3