-
Notifications
You must be signed in to change notification settings - Fork 125
/
ioctl.c
42 lines (38 loc) · 974 Bytes
/
ioctl.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
/*
* This file is part of the UCB release of Plan 9. It is subject to the license
* terms in the LICENSE file found in the top-level directory of this
* distribution and at http://akaros.cs.berkeley.edu/files/Plan9License. No
* part of the UCB release of Plan 9, including this file, may be copied,
* modified, propagated, or distributed except according to the terms contained
* in the LICENSE file.
*/
/* posix */
#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <errno.h>
#include <string.h>
#include <fcntl.h>
#include <sys/stat.h>
/* bsd extensions */
#include <sys/uio.h>
#include <sys/socket.h>
#include <sys/ioctl.h>
int
ioctl(int fd, unsigned long request, void* arg)
{
struct stat d;
if(request == FIONREAD) {
if(fstat(fd, &d) < 0) {
errno = EBADF;
return -1;
}
/* this works if the file is buffered somehow */
*(long*)arg = d.st_size;
return 0;
} else {
errno = EINVAL;
return -1;
}
}