PatchworkOS  3984a1d
A non-POSIX operating system.
Loading...
Searching...
No Matches
main.c
Go to the documentation of this file.
1#include <_internal/clock_t.h>
2#include <stdbool.h>
3#include <stdint.h>
4#include <stdio.h>
5#include <stdlib.h>
6#include <string.h>
7#include <sys/io.h>
8
9int main(int argc, char* argv[])
10{
11 if (argc < 2)
12 {
13 fprintf(stderr, "%s [-f] <file>\n", argv[0]);
14 return EXIT_FAILURE;
15 }
16
17 bool follow = false;
18 uint32_t numLines = 10;
19 const char* filename = NULL;
20 for (int i = 1; i < argc; i++)
21 {
22 if (strcmp(argv[i], "-f") == 0)
23 {
24 follow = true;
25 }
26 else
27 {
28 if (i != argc - 1)
29 {
30 fprintf(stderr, "tail: extra operand '%s'\n", argv[i]);
31 return EXIT_FAILURE;
32 }
33 filename = argv[i];
34 }
35 }
36
37 if (filename == NULL)
38 {
39 fprintf(stderr, "tail: no file specified\n");
40 return EXIT_FAILURE;
41 }
42
43 fd_t file = open(filename);
44 if (file == ERR)
45 {
46 fprintf(stderr, "tail: cannot open file '%s'\n", filename);
47 return EXIT_FAILURE;
48 }
49
50 while (true)
51 {
52 if (poll1(file, POLLIN, follow ? CLOCKS_NEVER : 0) != 0)
53 {
54 char buffer[1024];
55 uint64_t bytesRead = read(file, buffer, sizeof(buffer));
56 if (bytesRead > 0)
57 {
59 }
60 }
61 else if (!follow)
62 {
63 break;
64 }
65 }
66
67 return 0;
68}
int main(void)
Definition main.c:5
int64_t y
Definition main.c:153
#define CLOCKS_NEVER
Definition clock_t.h:16
fd_t open(const char *path)
System call for opening files.
Definition open.c:8
poll_events_t poll1(fd_t fd, poll_events_t events, clock_t timeout)
Wrapper for polling one file.
Definition poll1.c:8
size_t write(fd_t fd, const void *buffer, size_t count)
System call for writing to files.
Definition write.c:8
size_t read(fd_t fd, void *buffer, size_t count)
System call for reading from files.
Definition read.c:8
#define STDOUT_FILENO
Standard output file descriptor.
Definition io.h:35
@ POLLIN
File descriptor is ready to read.
Definition io.h:287
#define NULL
Pointer error value.
Definition NULL.h:23
#define ERR
Integer error value.
Definition ERR.h:17
__UINT64_TYPE__ fd_t
A file descriptor.
Definition fd_t.h:12
EFI_PHYSICAL_ADDRESS buffer
Definition mem.c:15
__UINT32_TYPE__ uint32_t
Definition stdint.h:15
__UINT64_TYPE__ uint64_t
Definition stdint.h:17
FILE * stderr
Definition std_streams.c:19
_PUBLIC int fprintf(FILE *_RESTRICT stream, const char *_RESTRICT format,...)
Definition fprintf.c:3
#define EXIT_FAILURE
Definition stdlib.h:47
_PUBLIC int strcmp(const char *s1, const char *s2)
Definition strcmp.c:3