fixed
This commit is contained in:
parent
3fd33db451
commit
ba33727ab3
1
TODO
1
TODO
|
@ -1,7 +1,6 @@
|
||||||
With "micro-" prefix
|
With "micro-" prefix
|
||||||
|
|
||||||
*Todo:
|
*Todo:
|
||||||
*du - b
|
|
||||||
tail
|
tail
|
||||||
expr
|
expr
|
||||||
uniq
|
uniq
|
||||||
|
|
|
@ -8,7 +8,7 @@ int main(int argc, char **argv) {
|
||||||
|
|
||||||
int opt;
|
int opt;
|
||||||
while ((opt = getopt(argc, argv, "")) != -1) {
|
while ((opt = getopt(argc, argv, "")) != -1) {
|
||||||
fprintf(stderr, "basename [var1] [suffix]\n");
|
fprintf(stderr, "basename [text] [suffix]\n");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -33,11 +33,8 @@ int cat(const char *path) {
|
||||||
int main(int argc, char **argv) {
|
int main(int argc, char **argv) {
|
||||||
int opt;
|
int opt;
|
||||||
while ((opt = getopt(argc, argv, "")) != -1) {
|
while ((opt = getopt(argc, argv, "")) != -1) {
|
||||||
switch (opt) {
|
printf("cat [file1 file2...]\n");
|
||||||
default:
|
return 0;
|
||||||
printf("cat [file1 file2...]\n");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
argv += optind;
|
argv += optind;
|
||||||
|
|
|
@ -9,10 +9,10 @@
|
||||||
#include "get_stat.h"
|
#include "get_stat.h"
|
||||||
#include "recurse.h"
|
#include "recurse.h"
|
||||||
|
|
||||||
unsigned int r_flag;
|
char r_flag;
|
||||||
char *f_flag = "chgrp";
|
char *f_flag = "chgrp";
|
||||||
unsigned int H_flag;
|
char H_flag;
|
||||||
unsigned int v_flag;
|
char v_flag;
|
||||||
|
|
||||||
int change(const char *path, void *p) {
|
int change(const char *path, void *p) {
|
||||||
struct group *grp = (struct group *)p;
|
struct group *grp = (struct group *)p;
|
||||||
|
@ -56,7 +56,7 @@ int main(int argc, char **argv) {
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
printf("chgrp [group] [file1 file2...]\n\t[-H Symbolic link]\n\t[-R Recursive] [-f Silent]\n\t[-v Verbose]\n");
|
printf("chgrp [RfHv] [group] [file1 file2...]\n\t-H Symbolic link\n\t-R Recursive\n\t-f Silent\n\t-v Verbose\n");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,10 +9,10 @@
|
||||||
#include "parse_mode.h"
|
#include "parse_mode.h"
|
||||||
#include "recurse.h"
|
#include "recurse.h"
|
||||||
|
|
||||||
unsigned int r_flag;
|
char r_flag;
|
||||||
char *f_flag = "chmod";
|
char *f_flag = "chmod";
|
||||||
unsigned int H_flag;
|
char H_flag;
|
||||||
unsigned int v_flag;
|
char v_flag;
|
||||||
|
|
||||||
int change(const char *file, void *p) {
|
int change(const char *file, void *p) {
|
||||||
char *mode_arg = (char *)p;
|
char *mode_arg = (char *)p;
|
||||||
|
@ -70,7 +70,7 @@ int main(int argc, char **argv) {
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
printf("chmod [ugoa]{+|-}[rwxXst] / [0 - 777] [file1 file2...]\n\t[-H Symbolic link]\n\t[-R Recursive] [-f Silent]\n\t[-v Verbose]\n");
|
printf("chmod [RfHv] [ugoa]{+|-}[rwxXst] / [0 - 777] [file1 file2...]\n\t-H Symbolic link\n\t-R Recursive\n\t-f Silent\n\t-v Verbose\n");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,10 +11,10 @@
|
||||||
#include "recurse.h"
|
#include "recurse.h"
|
||||||
#include "unused.h"
|
#include "unused.h"
|
||||||
|
|
||||||
unsigned int r_flag;
|
char r_flag;
|
||||||
char *f_flag = "chown";
|
char *f_flag = "chown";
|
||||||
unsigned int H_flag;
|
char H_flag;
|
||||||
unsigned int v_flag;
|
char v_flag;
|
||||||
int (*chown_func)(const char *pathname, uid_t owner, gid_t group);
|
int (*chown_func)(const char *pathname, uid_t owner, gid_t group);
|
||||||
long gid;
|
long gid;
|
||||||
long uid;
|
long uid;
|
||||||
|
@ -38,8 +38,8 @@ int change(const char *path, void *p) {
|
||||||
void get_owner(const char *arg) {
|
void get_owner(const char *arg) {
|
||||||
char *group = strchr(arg, ':');
|
char *group = strchr(arg, ':');
|
||||||
|
|
||||||
unsigned int g_flag = 1;
|
char g_flag = 1;
|
||||||
unsigned int u_flag = 1;
|
char u_flag = 1;
|
||||||
|
|
||||||
if (group == arg)
|
if (group == arg)
|
||||||
u_flag = 0;
|
u_flag = 0;
|
||||||
|
@ -99,7 +99,7 @@ int main(int argc, char **argv) {
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
printf("chown USER[:[GRP]] [file1 file2...]\n\t[-H Symbolic link]\n\t[-R Recursive] [-f Silent]\n\t[-v Verbose]\n");
|
printf("chown [RfHf] USER[:[GRP]] [file1 file2...]\n\t-H Symbolic link\n\t-R Recursive\n\t-f Silent\n\t-v Verbose\n");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
unsigned int s_flag;
|
char s_flag;
|
||||||
|
|
||||||
int compare(FILE *fp1, FILE *fp2) {
|
int compare(FILE *fp1, FILE *fp2) {
|
||||||
if (fp1 == fp2)
|
if (fp1 == fp2)
|
||||||
|
@ -55,16 +55,16 @@ FILE *file_open(const char *path) {
|
||||||
}
|
}
|
||||||
|
|
||||||
int main(int argc, char **argv) {
|
int main(int argc, char **argv) {
|
||||||
|
|
||||||
int opt;
|
int opt;
|
||||||
while ((opt = getopt(argc, argv, "fs")) != -1) {
|
while ((opt = getopt(argc, argv, "s")) != -1) {
|
||||||
switch (opt) {
|
switch (opt) {
|
||||||
case 's':
|
case 's':
|
||||||
case 'f':
|
|
||||||
s_flag = 1;
|
s_flag = 1;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
printf("cmp file1 file2 [skip1] [skip2]\n\t[-f/-s Silent]\n");
|
printf("cmp [s] [file1] [file2] [skip1] [skip2]\n\t-s Silent\n");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,7 +11,7 @@
|
||||||
#include "get_stat.h"
|
#include "get_stat.h"
|
||||||
|
|
||||||
char *f_flag = "cp";
|
char *f_flag = "cp";
|
||||||
unsigned int r_flag;
|
char r_flag;
|
||||||
|
|
||||||
int write_buffer(int mode, int ifd, int ofd, const char *dst) {
|
int write_buffer(int mode, int ifd, int ofd, const char *dst) {
|
||||||
off_t len = lseek(ifd, 0, SEEK_END);
|
off_t len = lseek(ifd, 0, SEEK_END);
|
||||||
|
@ -173,7 +173,7 @@ int main(int argc, char **argv) {
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
printf("cp [src1 src2...] [dst]\n\t[-f Silent] [-r Recursive]\n");
|
printf("cp [rf] [src1 src2...] [dst]\n\t-f Silent\n\t-r Recursive\n");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -79,7 +79,7 @@ int main(int argc, char **argv) {
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
printf("date [+\"fmt\"]\n\t[-s DATE Set new date]\n\t[-d DATE Print new date]\n\t[-u Work in UTC]\n\t[-r FILE Display last modification time of FILE]\n");
|
printf("date [rsdu] [+\"fmt\"]\n\t-s DATE Set new date\n\t-d DATE Print new date\n\t-u Work in UTC\n\t-r FILE Display last modification time of FILE\n");
|
||||||
printf("\nFormats:\n");
|
printf("\nFormats:\n");
|
||||||
for (size_t i = 0; i < sizeof(fmts) / sizeof(char *); i++)
|
for (size_t i = 0; i < sizeof(fmts) / sizeof(char *); i++)
|
||||||
printf("\t%s\n", fmts[i]);
|
printf("\t%s\n", fmts[i]);
|
||||||
|
|
|
@ -108,7 +108,7 @@ int main(int argc, char **argv) {
|
||||||
|
|
||||||
char *val = strchr(arg, '=');
|
char *val = strchr(arg, '=');
|
||||||
if (val == NULL) {
|
if (val == NULL) {
|
||||||
printf("dd\n\t[if=InputFile] [of=OutputFile]\n\t[bs=obs and obs]\n\t[ibs=Input buffer size]\n\t[obs=Output buffer size]\n\t[seek=Skip N obs-sized output blocks]\n\t[skip=Skip N ibs-sized output blocks]\n\t[count=Copy only N input blocks]\n\nN and BYTES may be followed by the following multiplicative\nsuffixes: w=2, b=512, k=1000, K=1024, m=1000*1000,\nM=1024*1024, g=1000*1000*1000, G=1024*1024*1024\n");
|
printf("dd\n\tif=InputFile\n\tof=OutputFile\n\tbs=obs and obs\n\tibs=Input buffer size\n\tobs=Output buffer size\n\tseek=Skip N obs-sized output blocks\n\tskip=Skip N ibs-sized output blocks\n\tcount=Copy only N input blocks\n\nN and BYTES may be followed by the following multiplicative\nsuffixes: w=2, b=512, k=1000, K=1024, m=1000*1000,\nM=1024*1024, g=1000*1000*1000, G=1024*1024*1024\n");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -9,8 +9,8 @@
|
||||||
#include "human.h"
|
#include "human.h"
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
|
||||||
unsigned int a_flag;
|
char a_flag;
|
||||||
unsigned int h_flag;
|
char h_flag;
|
||||||
off_t block = 1024;
|
off_t block = 1024;
|
||||||
|
|
||||||
void print_human(const char *src, const off_t total, const off_t used, const off_t avail, const off_t capacity, const char *dst) {
|
void print_human(const char *src, const off_t total, const off_t used, const off_t avail, const off_t capacity, const char *dst) {
|
||||||
|
@ -44,7 +44,7 @@ int main(int argc, char **argv) {
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
printf("df\n\t[-h Human readable (1024)] [-a Show all]\n\t[-H Human readable (1000)]\n");
|
printf("df [rHa]\n\t-h Human readable (1024)\n\t-a Show all\n\t-H Human readable (1000)\n");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,10 +9,9 @@
|
||||||
#include "make_path.h"
|
#include "make_path.h"
|
||||||
#include "human.h"
|
#include "human.h"
|
||||||
|
|
||||||
unsigned int h_flag;
|
char h_flag;
|
||||||
unsigned int s_flag;
|
char s_flag;
|
||||||
unsigned int c_flag;
|
char c_flag;
|
||||||
unsigned int b_flag;
|
|
||||||
off_t total;
|
off_t total;
|
||||||
|
|
||||||
void print(off_t size, const char *filename) {
|
void print(off_t size, const char *filename) {
|
||||||
|
@ -66,7 +65,6 @@ off_t du(const char *path, int recurs_flag) {
|
||||||
/* Get file size */
|
/* Get file size */
|
||||||
else {
|
else {
|
||||||
sum = sb.st_blocks * 512;
|
sum = sb.st_blocks * 512;
|
||||||
|
|
||||||
if (c_flag)
|
if (c_flag)
|
||||||
total += sum;
|
total += sum;
|
||||||
|
|
||||||
|
@ -80,7 +78,7 @@ off_t du(const char *path, int recurs_flag) {
|
||||||
int main(int argc, char **argv) {
|
int main(int argc, char **argv) {
|
||||||
|
|
||||||
int opt;
|
int opt;
|
||||||
while ((opt = getopt(argc, argv, "hsbc")) != -1) {
|
while ((opt = getopt(argc, argv, "hsc")) != -1) {
|
||||||
switch (opt) {
|
switch (opt) {
|
||||||
case 'h':
|
case 'h':
|
||||||
h_flag = 1;
|
h_flag = 1;
|
||||||
|
@ -95,7 +93,7 @@ int main(int argc, char **argv) {
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
printf("du [src1 src2...]\n\t[-h Sizes in human readable format]\n\t[-s Display only a total for each argument]\n\t[-c produce a grand total]\n");
|
printf("du [hsc] [src1 src2...]\n\t-h Sizes in human readable format\n\t-s Display only a total for each argument\n\t-c produce a grand total\n");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,8 +6,8 @@
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
|
||||||
unsigned int v_flag;
|
char v_flag;
|
||||||
unsigned int c_flag;
|
char c_flag;
|
||||||
|
|
||||||
long parse_long(const char *str) {
|
long parse_long(const char *str) {
|
||||||
char *ptr;
|
char *ptr;
|
||||||
|
@ -60,7 +60,7 @@ int main(int argc, char **argv) {
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
printf("head [file1 file2...]\n\t[-n Print N lines] [-c Print N bytes]\n\t[-v Print headers]\n");
|
printf("head [ncv] [file1 file2...]\n\t-n Print N lines\n\t-c Print N bytes\n\t-v Print headers\n");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,11 +9,11 @@
|
||||||
#include <limits.h>
|
#include <limits.h>
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
|
|
||||||
unsigned int g_flag;
|
char g_flag;
|
||||||
unsigned int G_flag;
|
char G_flag;
|
||||||
unsigned int n_flag;
|
char n_flag;
|
||||||
unsigned int r_flag;
|
char r_flag;
|
||||||
unsigned int u_flag;
|
char u_flag;
|
||||||
|
|
||||||
int print_groups(const struct passwd *pwd, const char *fmt, const int flag) {
|
int print_groups(const struct passwd *pwd, const char *fmt, const int flag) {
|
||||||
int ngroups = 0;
|
int ngroups = 0;
|
||||||
|
@ -77,7 +77,7 @@ int def_ids(uid_t uid, struct passwd *pwd) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void usage(int sig) {
|
void usage(int sig) {
|
||||||
printf("id [user]\n\t[-u User ID] [-g Group ID]\n\t[-G Supplementary group IDs]\n\t[-n Print names instead of numbers]\n\t[-r Print real ID instead of effective ID]\n");
|
printf("id [gGurn] [user]\n\t-u User ID\n\t-g Group ID\n\t-G Supplementary group IDs\n\t-n Print names instead of numbers\n\t-r Print real ID instead of effective ID\n");
|
||||||
exit(sig);
|
exit(sig);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -4,9 +4,8 @@
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include "make_path.h"
|
#include "make_path.h"
|
||||||
|
|
||||||
/* Symbolic */
|
char s_flag;
|
||||||
unsigned int s_flag;
|
char f_flag;
|
||||||
unsigned int f_flag;
|
|
||||||
|
|
||||||
int ln(const char *src, const char *dst) {
|
int ln(const char *src, const char *dst) {
|
||||||
if (f_flag)
|
if (f_flag)
|
||||||
|
@ -32,7 +31,7 @@ int main(int argc, char **argv) {
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
printf("ln [src] [dst]\n\t[-f Force] [-s Symbolic]\n");
|
printf("ln [sf] [src] [dst]\n\t-f Force\n\t-s Symbolic\n");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,18 +16,18 @@
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
#include "human.h"
|
#include "human.h"
|
||||||
|
|
||||||
unsigned int O_flag;
|
char O_flag;
|
||||||
unsigned int a_flag;
|
char a_flag;
|
||||||
unsigned int l_flag;
|
char l_flag;
|
||||||
unsigned int F_flag;
|
char F_flag;
|
||||||
unsigned int c_flag;
|
char c_flag;
|
||||||
unsigned int R_flag;
|
char R_flag;
|
||||||
unsigned int d_flag;
|
char d_flag;
|
||||||
unsigned int L_flag;
|
char L_flag;
|
||||||
unsigned int h_flag;
|
char h_flag;
|
||||||
unsigned int s_flag;
|
char s_flag;
|
||||||
unsigned int i_flag;
|
char i_flag;
|
||||||
unsigned int p_flag;
|
char p_flag;
|
||||||
|
|
||||||
int sortd(const void *p1, const void *p2);
|
int sortd(const void *p1, const void *p2);
|
||||||
int (*sorter)(const void *p1, const void *p2) = sortd;
|
int (*sorter)(const void *p1, const void *p2) = sortd;
|
||||||
|
@ -412,7 +412,7 @@ int main(int argc, char **argv) {
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
printf("ls [dir1 dir2...]\n\t[-a Show hidden files]\n\t[-l Use a long listing format]\n\t[-F Append indicator to names]\n\t[-c Color mode] [-R Recursive]\n\t[-1 One column] [-d Print only dir names]\n\t[-L Follow symlinks]\n\t[-h Sizes in human readable format]\n\t[-i Listen inodes] [-t Sort by mtime]\n\t[-S Sort by size] [-s Print file size]\n");
|
printf("ls [1alFcRdLhistS] [dir1 file2...]\n\t-a Show hidden files\n\t-l Use a long listing format\n\t-F Append indicator to names\n\t-c Color mode\n\t-R Recursive\n\t-1 One column\n\t-d Print only dir names\n\t-L Follow symlinks\n\t-h Sizes in human readable format\n\t-i Listen inodes\n\t-t Sort by mtime\n\t-S Sort by size\n\t-s Print file size\n");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,8 +7,8 @@
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include "parse_mode.h"
|
#include "parse_mode.h"
|
||||||
|
|
||||||
unsigned int v_flag;
|
char v_flag;
|
||||||
unsigned int p_flag;
|
char p_flag;
|
||||||
mode_t mode = 0777;
|
mode_t mode = 0777;
|
||||||
|
|
||||||
int do_mkdir(const char *path) {
|
int do_mkdir(const char *path) {
|
||||||
|
@ -21,7 +21,7 @@ int do_mkdir(const char *path) {
|
||||||
}
|
}
|
||||||
|
|
||||||
else if (v_flag)
|
else if (v_flag)
|
||||||
printf("mkdir: %s created with mode: %d\n", path, mode);
|
printf("mkdir: %s created with mode %d\n", path, mode);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -61,7 +61,7 @@ int main(int argc, char **argv) {
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
printf("mkdir [dst1 dst2...]\n\t[-p Make parent dir] [-m MODE Mode]\n");
|
printf("mkdir [pmv] [dst1 dst2...]\n\t-p Make parent dir\n\t-m MODE Mode\n\t-v Verbose\n");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -33,7 +33,7 @@ int main(int argc, char **argv) {
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
printf("mkfifo [file1 file2...]\n\t[-m Mode]\n");
|
printf("mkfifo [m] [file1 file2...]\n\t-m MODE\n");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -38,7 +38,7 @@ int main(int argc, char **argv) {
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
printf("mknod [-m MODE] [NAME] [TYPE] [MAJOR MINOR]\n");
|
printf("mknod [m] [NAME] [TYPE] [MAJOR MINOR]\n\t-m MODE\n\n");
|
||||||
printf("Types:\n\tb - block device\n\tc or u - character device\n\tp - named pipe/fifo (MAJOR MINOR must be omitted)\n\ts - socket\n");
|
printf("Types:\n\tb - block device\n\tc or u - character device\n\tp - named pipe/fifo (MAJOR MINOR must be omitted)\n\ts - socket\n");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -60,7 +60,7 @@ int main(int argc, char **argv) {
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
printf("mktemp [file]\n\t[-d Dir] [-p Base dir]\n");
|
printf("mktemp [dp] [file]\n\t-d Dir\n\t-p Base dir\n");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -38,7 +38,7 @@ int main(int argc, char **argv) {
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
printf("mv [src1 src2...] [dst]\n\t[-f Force]\n");
|
printf("mv [f] [src1 src2...] [dst]\n\t-f Force\n");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,7 +17,7 @@ int main(int argc, char **argv) {
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
printf("nice [cmd] [arg1] [arg2]\n\t[-n N Add N to the niceness]\n");
|
printf("nice [n] [cmd] [arg1] [arg2]\n\t-n N Add N to the niceness\n");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,8 +6,8 @@
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
|
||||||
unsigned int w_flag = 4;
|
char w_flag = 4;
|
||||||
unsigned int lines = 1;
|
char lines = 1;
|
||||||
|
|
||||||
int nl(const char *path) {
|
int nl(const char *path) {
|
||||||
FILE *fp = stdin;
|
FILE *fp = stdin;
|
||||||
|
@ -52,7 +52,7 @@ int main(int argc, char **argv) {
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
printf("nl [file1 file2...]\n\t[-w N Width of line numbers]\n\t[-v N Start from N]\n");
|
printf("nl [wv] [file1 file2...]\n\t-w N Width of line numbers\n\t-v N Start from N\n");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -41,7 +41,7 @@ int main(int argc, char **argv) {
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
printf("renice [id1 id2...]\n\t[-n N Add N to the niceness]\n\t[-g Process group ids]\n\t[-u Process user names]\n\t[-p Process ids]\n");
|
printf("renice [ngup] [id1 id2...]\n\t-n N Add N to the niceness\n\t-g Process group ids\n\t-u Process user names\n\t-p Process ids\n");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,7 +10,7 @@
|
||||||
#include "unused.h"
|
#include "unused.h"
|
||||||
|
|
||||||
char *f_flag = "rm";
|
char *f_flag = "rm";
|
||||||
unsigned int r_flag;
|
char r_flag;
|
||||||
|
|
||||||
int rm(const char *path, void *p) {
|
int rm(const char *path, void *p) {
|
||||||
UNUSED(p);
|
UNUSED(p);
|
||||||
|
@ -49,7 +49,7 @@ int main(int argc, char **argv) {
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
printf("rm [file1 file2...]\n\t[-f Force] [-r Recursive]\n");
|
printf("rm [rf] [file1 file2...]\n\t-f Force\n\t-r Recursive\n");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,10 +8,10 @@
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
|
||||||
unsigned int f_flag;
|
char f_flag;
|
||||||
unsigned int u_flag;
|
char u_flag;
|
||||||
unsigned int z_flag;
|
char z_flag;
|
||||||
unsigned int n_loops = 3;
|
int n_loops = 3;
|
||||||
|
|
||||||
int shred(int rand_fd, int fd) {
|
int shred(int rand_fd, int fd) {
|
||||||
/* Get size */
|
/* Get size */
|
||||||
|
@ -25,7 +25,7 @@ int shred(int rand_fd, int fd) {
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (unsigned int n = 0; n < n_loops; n++) {
|
for (char n = 0; n < n_loops; n++) {
|
||||||
if (read(rand_fd, buf, size) == 0)
|
if (read(rand_fd, buf, size) == 0)
|
||||||
fprintf(stderr, "shred: %s", strerror(errno));
|
fprintf(stderr, "shred: %s", strerror(errno));
|
||||||
|
|
||||||
|
@ -65,7 +65,7 @@ int main(int argc, char **argv) {
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
printf("shred [file1 file2...]\n\t[-n N Overwrite N times, default 3]\n\t[-z Final overwrite with zeros]\n\t[-u Remove file] [-f Chmod to ensure writability]\n");
|
printf("shred [fuzn] [file1 file2...]\n\t-n N Overwrite N times, default 3\n\t-z Final overwrite with zeros\n\t-u Remove file\n\t-f Chmod to ensure writability\n");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -68,7 +68,7 @@ int main(int argc, char **argv) {
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
printf("split [file1]\n\t[-l N Split by N lines]\n\t[-a N Use N letters as prefix]\n\t[-b N[k|m] Split by N (kilo|mega)bytes]\n");
|
printf("split [alb] [file1]\n\t-l N Split by N lines\n\t-a N Use N letters as prefix\n\t-b N[k|m] Split by N (kilo|mega)bytes\n");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,7 +22,7 @@ int main(int argc, char **argv) {
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
printf("tee [file]\n\t[-a Append]\n\t[-i Ignore interrupt signals]\n");
|
printf("tee [ai] [file]\n\t-a Append\n\t-i Ignore interrupt signals\n");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -28,8 +28,10 @@ int main(int argc, char **argv) {
|
||||||
|
|
||||||
/* Run */
|
/* Run */
|
||||||
pid_t pid;
|
pid_t pid;
|
||||||
if ((pid = fork()) == 0)
|
if ((pid = fork()) == 0) {
|
||||||
execvp(argv[1], argv + 1);
|
execvp(argv[1], argv + 1);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
int status = 0;
|
int status = 0;
|
||||||
waitpid(pid, &status, 0);
|
waitpid(pid, &status, 0);
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
|
#include <stdlib.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <utime.h>
|
#include <utime.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
|
@ -6,35 +7,140 @@
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
|
|
||||||
int touch(const char *path) {
|
char c_flag;
|
||||||
int fd = open(path, O_CREAT | O_RDONLY, 0666);
|
char m_flag;
|
||||||
if (fd < 0) {
|
char a_flag;
|
||||||
fprintf(stderr, "touch: %s\n", strerror(errno));
|
|
||||||
|
int setdate(const char *path, const time_t date, char flag) {
|
||||||
|
struct utimbuf new_time;
|
||||||
|
|
||||||
|
if (flag || a_flag)
|
||||||
|
new_time.actime = date;
|
||||||
|
|
||||||
|
if (flag || m_flag)
|
||||||
|
new_time.modtime = date;
|
||||||
|
|
||||||
|
if (utime(path, &new_time) < 0) {
|
||||||
|
fprintf(stderr, "touch: %s: %s\n", path, strerror(errno));
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
close(fd);
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
struct utimbuf new_time;
|
int touch(const char *path, const time_t date) {
|
||||||
time_t now = time(NULL);
|
|
||||||
|
|
||||||
new_time.actime = now;
|
if (!c_flag) {
|
||||||
new_time.modtime = now;
|
int fd = open(path, O_CREAT | O_RDONLY, 0666);
|
||||||
|
if (fd < 0) {
|
||||||
|
fprintf(stderr, "touch: %s\n", strerror(errno));
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
if (utime(path, &new_time) < 0)
|
close(fd);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Update the date to now */
|
||||||
|
if (setdate(path, time(NULL), 1))
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
/* Seting custom values */
|
||||||
|
char flag = 0;
|
||||||
|
if (m_flag == 0 && a_flag == 0)
|
||||||
|
flag = 1;
|
||||||
|
|
||||||
|
if (date != -1 && setdate(path, date, flag))
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int main(const int argc, const char **argv) {
|
time_t parse_date(char *str) {
|
||||||
if (argc == 1) {
|
char *fmt = NULL;
|
||||||
|
switch (strlen(str)) {
|
||||||
|
case 8:
|
||||||
|
fmt = "%m%d%H%M";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 10:
|
||||||
|
fmt = "%y%m%d%H%M";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 11:
|
||||||
|
fmt = "%m%d%H%M.%S";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 12:
|
||||||
|
fmt = "%Y%m%d%H%M";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 13:
|
||||||
|
fmt = "%y%m%d%H%M.%S";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 15:
|
||||||
|
fmt = "%Y%m%d%H%M.%S";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 19:
|
||||||
|
fmt = "%Y-%m-%dT%H:%M:%S";
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
fprintf(stderr, "touch: invalid date format\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
time_t now = time(NULL);
|
||||||
|
struct tm tm = *localtime(&now);
|
||||||
|
|
||||||
|
if (!strptime(str, fmt, &tm)) {
|
||||||
|
fprintf(stderr, "touch: %s\n", strerror(errno));
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
return mktime(&tm);
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(int argc, char **argv) {
|
||||||
|
time_t date = -1;
|
||||||
|
|
||||||
|
int opt;
|
||||||
|
while ((opt = getopt(argc, argv, "cmad:t:")) != -1) {
|
||||||
|
switch (opt) {
|
||||||
|
case 'm':
|
||||||
|
m_flag = 1;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'a':
|
||||||
|
a_flag = 1;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'c':
|
||||||
|
c_flag = 1;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 't':
|
||||||
|
case 'd':
|
||||||
|
date = parse_date(optarg);
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
printf("touch [cmad] [file1 file2...]\n\t-c Don't create files\n\t-a Change only atime\n\t-m Change only mtime\n\t-d Date/time to use\n");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
argv += optind;
|
||||||
|
argc -= optind;
|
||||||
|
|
||||||
|
if (argc == 0) {
|
||||||
printf("touch: missing operand\n");
|
printf("touch: missing operand\n");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int i = 1; i < argc; i++)
|
for (int i = 0; i < argc; i++)
|
||||||
if (touch(argv[i]))
|
if (touch(argv[i], date))
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -100,7 +100,7 @@ int main(int argc, char **argv) {
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
printf("uname\n\t[-a All] [-s Sys]\n\t[-n Nodename] [-r Release]\n\t[-v Version] [-m Machine]\n\t[-o Os name]\n");
|
printf("uname [asnrvmop]\n\t-a All\n\t-s Sys]\n\t-n Nodename\n\t-r Release\n\t-v Version\n\t-m Machine\n\t-o Os name\n");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -84,7 +84,7 @@ int main(int argc, char **argv) {
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
printf("wc [file1 file2...]\n\t[-l Lines] [-c Bytes]\n\t[-w Words] [-t Don't print total]\n");
|
printf("wc [lcwt] [file1 file2...]\n\t-l Lines\n\t-c Bytes\n\t-w Words\n\t-t Don't print total\n");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -127,7 +127,7 @@ int main(int argc, char **argv) {
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
printf("xargs [cmd [arg1] [arg2...]]\n\t[-t Print the command]\n\t[-n Pass no more than N args]\n\t[-r Don't run command if input is empty]\n\t[-s Pass command line of no more than N bytes]\n");
|
printf("xargs [tnsr] [cmd [arg1] [arg2...]]\n\t-t Print the command\n\t-n Pass no more than N args\n\t-r Don't run command if input is empty\n\t-s Pass command line of no more than N bytes\n");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -36,7 +36,7 @@ int main(int argc, char **argv) {
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
printf("hostname [hostname]\n\t[-c CONFIG Use config file]\n");
|
printf("hostname [c] [hostname]\n\t-c PATH Use config file\n");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -80,7 +80,7 @@ int main(int argc, char **argv) {
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
printf("kill [pid1 pid2...]\n\t[-s SIG] [-l List all signals]\n\t[-a Kill all process]\n");
|
printf("kill [lsa] [pid1 pid2...]\n\t-s SIG\n\t-l List all signals\n\t-a Kill all process\n");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,6 @@
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <errno.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
@ -44,7 +46,7 @@ int main(void) {
|
||||||
double avg[3] = {0, 0, 0};
|
double avg[3] = {0, 0, 0};
|
||||||
|
|
||||||
if (getloadavg(avg, sizeof(avg) / sizeof(avg[0])) < 0) {
|
if (getloadavg(avg, sizeof(avg) / sizeof(avg[0])) < 0) {
|
||||||
fprintf(stderr, "getloadavg: getloadavg() failed\n");
|
fprintf(stderr, "uptime: %s\n", strerror(errno));
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -190,7 +190,7 @@ int main(int argc, char **argv) {
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
printf("rc [script]\n\t[-l UNUSED]\n");
|
printf("rc [l] [script]\n\t-l UNUSED\n");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,7 +22,7 @@ int main(int argc, char **argv) {
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
printf("dmesg\n\t[-n LEVEL Set console logging level] [-s SIZE Buffer Size]\n");
|
printf("dmesg [sn]\n\t-n LEVEL Set console logging level\n\t-s SIZE Buffer Size\n");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -88,7 +88,7 @@ int main(int argc, char **argv) {
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
printf("mount [DEVICE] [NODE]\n\t[-t Fs type, default %s] [-o Options]\n\t[-a Mount all fs in /etc/fstab]\n\nOptions:\n", MOUNT_DEF_FS);
|
printf("mount [ato] [DEVICE] [NODE]\n\t-t Fs type, default %s\n\t-o Options\n\t-a Mount all fs in /etc/fstab\n\nOptions:\n", MOUNT_DEF_FS);
|
||||||
print_opts();
|
print_opts();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -48,7 +48,7 @@ int main(int argc, char **argv) {
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
printf("umount [dst1 dst2...]\n\t[-a Umount all]\n\t[-f Force umount] [-l Lazy umount]\n");
|
printf("umount [afl] [dst1 dst2...]\n\t-a Umount all\n\t-f Force umount\n\t-l Lazy umount\n");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue