[hackers] [sbase] Add stat(1) || sin
commit d0c87f6d3e3b0d13d8599d02d4a8a5509ee1eaab
Author: sin <sin_AT_2f30.org>
Date: Thu Aug 15 10:04:38 2013 +0100
Add stat(1)
diff --git a/Makefile b/Makefile
index fcf28f3..8bd7421 100644
--- a/Makefile
+++ b/Makefile
_AT_@ -86,6 +86,7 @@ SRC = \
sha1sum.c \
sha256sum.c\
sha512sum.c\
+ stat.c \
wc.c \
who.c \
yes.c
diff --git a/stat.1 b/stat.1
new file mode 100644
index 0000000..7391edf
--- /dev/null
+++ b/stat.1
_AT_@ -0,0 +1,17 @@
+.TH STAT 1 sbase\-VERSION
+.SH NAME
+stat \- display file status
+.SH SYNOPSIS
+.B stat
+.RB [ \-L ]
+.RI [ file ...]
+.SH DESCRIPTION
+.B stat
+displays information about the given files or stdin if no files
+are specified.
+.SH OPTIONS
+.TP
+.B \-L
+follow links
+.SH SEE ALSO
+.IR stat (2)
diff --git a/stat.c b/stat.c
new file mode 100644
index 0000000..2e68352
--- /dev/null
+++ b/stat.c
_AT_@ -0,0 +1,73 @@
+/* See LICENSE file for copyright and license details. */
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <unistd.h>
+#include <errno.h>
+#include <inttypes.h>
+#include <stdio.h>
+#include <time.h>
+#include "util.h"
+
+static void show_stat(const char *file, struct stat *st);
+
+static void
+usage(void)
+{
+ eprintf("usage: %s [-L] [file...]
", argv0);
+}
+
+int
+main(int argc, char *argv[])
+{
+ struct stat st;
+ int i, ret = 0;
+ int Lflag = 0;
+ int (*fn)(const char *, struct stat *);
+
+ ARGBEGIN {
+ case 'L':
+ Lflag = 1;
+ break;
+ default:
+ usage();
+ } ARGEND;
+
+ if (argc == 0) {
+ if (fstat(STDIN_FILENO, &st) < 0)
+ eprintf("stat <stdin>:");
+ show_stat("<stdin>", &st);
+ }
+
+ for (i = 0; i < argc; i++) {
+ fn = Lflag ? stat : lstat;
+ if (fn(argv[i], &st) == -1) {
+ fprintf(stderr, "%s %s: ", Lflag ? "stat" : "lstat",
+ argv[i]);
+ perror(NULL);
+ ret = 1;
+ continue;
+ }
+ show_stat(argv[i], &st);
+ }
+
+ return ret;
+}
+
+static void
+show_stat(const char *file, struct stat *st)
+{
+ char buf[100];
+
+ printf(" File: ā%sā
", file);
+ printf(" Size: %lu Blocks: %lu IO Block: %lu
", (unsigned long)st->st_size,
+ (unsigned long)st->st_blocks, (unsigned long)st->st_blksize);
+ printf("Device: %xh/%ud Inode: %lu Links %lu
", major(st->st_dev),
+ minor(st->st_dev), (unsigned long)st->st_ino, (unsigned long)st->st_nlink);
+ printf("Access: %04o Uid: %u Gid: %u
", st->st_mode & 0777, st->st_uid, st->st_gid);
+ strftime(buf, sizeof(buf), "%Y-%m-%d %H:%M:%S", localtime(&st->st_atime));
+ printf("Access: %s
", buf);
+ strftime(buf, sizeof(buf), "%Y-%m-%d %H:%M:%S", localtime(&st->st_mtime));
+ printf("Modify: %s
", buf);
+ strftime(buf, sizeof(buf), "%Y-%m-%d %H:%M:%S", localtime(&st->st_ctime));
+ printf("Change: %s
", buf);
+}
Received on Sat Oct 05 2013 - 16:29:41 CEST
This archive was generated by hypermail 2.3.0
: Sat Oct 05 2013 - 16:36:53 CEST