This commit is contained in:
Pierre Pronchery 2011-04-01 00:54:40 +00:00
parent 5efca5e777
commit 383e81a765
6 changed files with 132 additions and 3 deletions

View File

@ -51,6 +51,7 @@ dist:
$(PACKAGE)-$(VERSION)/src/nice.c \
$(PACKAGE)-$(VERSION)/src/pr.c \
$(PACKAGE)-$(VERSION)/src/printf.c \
$(PACKAGE)-$(VERSION)/src/ps.c \
$(PACKAGE)-$(VERSION)/src/pwd.c \
$(PACKAGE)-$(VERSION)/src/renice.c \
$(PACKAGE)-$(VERSION)/src/rm.c \

View File

@ -29,6 +29,7 @@ mv
nice
pr
printf
ps
pwd
renice
rm

View File

@ -1,4 +1,4 @@
TARGETS = basename cat chgrp chmod chown cksum cmp cp df dirname du echo false file find head id kill link ln locale logname ls mkdir mkfifo more mv nice pr printf pwd renice rm rmdir sleep strings tail test time touch true tty uname uniq unlink wc who
TARGETS = basename cat chgrp chmod chown cksum cmp cp df dirname du echo false file find head id kill link ln locale logname ls mkdir mkfifo more mv nice pr printf ps pwd renice rm rmdir sleep strings tail test time touch true tty uname uniq unlink wc who
PREFIX = /usr/local
DESTDIR =
BINDIR = $(PREFIX)/bin
@ -225,6 +225,13 @@ printf_LDFLAGS = $(LDFLAGSF) $(LDFLAGS)
printf: $(printf_OBJS)
$(CC) -o printf $(printf_OBJS) $(printf_LDFLAGS)
ps_OBJS = ps.o
ps_CFLAGS = $(CPPFLAGSF) $(CPPFLAGS) $(CFLAGSF) $(CFLAGS)
ps_LDFLAGS = $(LDFLAGSF) $(LDFLAGS)
ps: $(ps_OBJS)
$(CC) -o ps $(ps_OBJS) $(ps_LDFLAGS)
pwd_OBJS = pwd.o
pwd_CFLAGS = $(CPPFLAGSF) $(CPPFLAGS) $(CFLAGSF) $(CFLAGS)
pwd_LDFLAGS = $(LDFLAGSF) $(LDFLAGS)
@ -434,6 +441,9 @@ pr.o: pr.c
printf.o: printf.c
$(CC) $(printf_CFLAGS) -c printf.c
ps.o: ps.c
$(CC) $(ps_CFLAGS) -c ps.c
pwd.o: pwd.c
$(CC) $(pwd_CFLAGS) -c pwd.c
@ -486,7 +496,7 @@ who.o: who.c
$(CC) $(who_CFLAGS) -c who.c
clean:
$(RM) -- $(basename_OBJS) $(cat_OBJS) $(chgrp_OBJS) $(chmod_OBJS) $(chown_OBJS) $(cksum_OBJS) $(cmp_OBJS) $(cp_OBJS) $(df_OBJS) $(dirname_OBJS) $(du_OBJS) $(echo_OBJS) $(false_OBJS) $(file_OBJS) $(find_OBJS) $(head_OBJS) $(id_OBJS) $(kill_OBJS) $(link_OBJS) $(ln_OBJS) $(locale_OBJS) $(logname_OBJS) $(ls_OBJS) $(mkdir_OBJS) $(mkfifo_OBJS) $(more_OBJS) $(mv_OBJS) $(nice_OBJS) $(pr_OBJS) $(printf_OBJS) $(pwd_OBJS) $(renice_OBJS) $(rm_OBJS) $(rmdir_OBJS) $(sleep_OBJS) $(strings_OBJS) $(tail_OBJS) $(test_OBJS) $(time_OBJS) $(touch_OBJS) $(true_OBJS) $(tty_OBJS) $(uname_OBJS) $(uniq_OBJS) $(unlink_OBJS) $(wc_OBJS) $(who_OBJS)
$(RM) -- $(basename_OBJS) $(cat_OBJS) $(chgrp_OBJS) $(chmod_OBJS) $(chown_OBJS) $(cksum_OBJS) $(cmp_OBJS) $(cp_OBJS) $(df_OBJS) $(dirname_OBJS) $(du_OBJS) $(echo_OBJS) $(false_OBJS) $(file_OBJS) $(find_OBJS) $(head_OBJS) $(id_OBJS) $(kill_OBJS) $(link_OBJS) $(ln_OBJS) $(locale_OBJS) $(logname_OBJS) $(ls_OBJS) $(mkdir_OBJS) $(mkfifo_OBJS) $(more_OBJS) $(mv_OBJS) $(nice_OBJS) $(pr_OBJS) $(printf_OBJS) $(ps_OBJS) $(pwd_OBJS) $(renice_OBJS) $(rm_OBJS) $(rmdir_OBJS) $(sleep_OBJS) $(strings_OBJS) $(tail_OBJS) $(test_OBJS) $(time_OBJS) $(touch_OBJS) $(true_OBJS) $(tty_OBJS) $(uname_OBJS) $(uniq_OBJS) $(unlink_OBJS) $(wc_OBJS) $(who_OBJS)
distclean: clean
$(RM) -- $(TARGETS)
@ -553,6 +563,8 @@ install: $(TARGETS)
$(MKDIR) $(DESTDIR)$(BINDIR)
$(INSTALL) -m 0755 -- printf $(DESTDIR)$(BINDIR)/printf
$(MKDIR) $(DESTDIR)$(BINDIR)
$(INSTALL) -m 0755 -- ps $(DESTDIR)$(BINDIR)/ps
$(MKDIR) $(DESTDIR)$(BINDIR)
$(INSTALL) -m 0755 -- pwd $(DESTDIR)$(BINDIR)/pwd
$(MKDIR) $(DESTDIR)$(BINDIR)
$(INSTALL) -m 0755 -- renice $(DESTDIR)$(BINDIR)/renice
@ -618,6 +630,7 @@ uninstall:
$(RM) -- $(DESTDIR)$(BINDIR)/nice
$(RM) -- $(DESTDIR)$(BINDIR)/pr
$(RM) -- $(DESTDIR)$(BINDIR)/printf
$(RM) -- $(DESTDIR)$(BINDIR)/ps
$(RM) -- $(DESTDIR)$(BINDIR)/pwd
$(RM) -- $(DESTDIR)$(BINDIR)/renice
$(RM) -- $(DESTDIR)$(BINDIR)/rm

View File

@ -1,4 +1,4 @@
targets=basename,cat,chgrp,chmod,chown,cksum,cmp,cp,df,dirname,du,echo,false,file,find,head,id,kill,link,ln,locale,logname,ls,mkdir,mkfifo,more,mv,nice,pr,printf,pwd,renice,rm,rmdir,sleep,strings,tail,test,time,touch,true,tty,uname,uniq,unlink,wc,who
targets=basename,cat,chgrp,chmod,chown,cksum,cmp,cp,df,dirname,du,echo,false,file,find,head,id,kill,link,ln,locale,logname,ls,mkdir,mkfifo,more,mv,nice,pr,printf,ps,pwd,renice,rm,rmdir,sleep,strings,tail,test,time,touch,true,tty,uname,uniq,unlink,wc,who
cflags_force=-W
cflags=-Wall -g -O2 -pedantic
dist=Makefile,common.c
@ -163,6 +163,11 @@ type=binary
sources=printf.c
install=$(BINDIR)
[ps]
type=binary
sources=ps.c
install=$(BINDIR)
[pwd]
type=binary
sources=pwd.c

93
src/ps.c Normal file
View File

@ -0,0 +1,93 @@
/* $Id$ */
/* Copyright (c) 2011 Pierre Pronchery <khorben@defora.org> */
/* This file is part of DeforaOS Unix utils */
/* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, version 3 of the License.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>. */
#include <dirent.h>
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <limits.h>
/* ps */
static int _ps_error(char const * message, int ret);
static int _ps(void)
{
char const proc[] = "/proc";
char buf[256];
DIR * dir;
struct dirent * de;
long pid;
char * p;
FILE * fp;
size_t s;
if((dir = opendir(proc)) == NULL)
return -_ps_error(proc, 1);
printf("%5s %s\n", "PID", "CMD");
while((de = readdir(dir)) != NULL)
{
pid = strtol(de->d_name, &p, 10);
if(de->d_name[0] == '\0' || *p != '\0' || pid < 0)
continue;
snprintf(buf, sizeof(buf), "%s/%s/%s", proc, de->d_name,
"cmdline");
if((fp = fopen(buf, "r")) != NULL)
{
s = fread(buf, sizeof(*buf), sizeof(buf) - 1, fp);
fclose(fp);
buf[s] = '\0';
}
else
buf[0] = '\0';
printf("%5lu %s\n", pid, buf);
}
closedir(dir);
return 0;
}
static int _ps_error(char const * message, int ret)
{
fputs("ps: ", stderr);
perror(message);
return ret;
}
/* usage */
static int _usage(void)
{
fputs("Usage: ps\n", stderr);
return 1;
}
/* main */
int main(int argc, char * argv[])
{
int o;
while((o = getopt(argc, argv, "")) != -1)
switch(o)
{
default:
return _usage();
}
if(optind != argc)
return _usage();
return (_ps() == 0) ? 0 : 2;
}

View File

@ -468,6 +468,21 @@
#undef _prefs_parse
#undef _printf
/* ps.c */
#define main _ps_main
#define _usage _ps_usage
#define _Prefs _ps_Prefs
#define Prefs ps_Prefs
#define _prefs_parse _ps_prefs_parse
#define _ps __ps
#include "../src/ps.c"
#undef main
#undef _usage
#undef _Prefs
#undef Prefs
#undef _prefs_parse
#undef _ps
/* pwd.c */
#define main _pwd_main
#define _usage _pwd_usage
@ -757,6 +772,7 @@ Call calls[] =
{ "nice", _nice_main },
{ "pr", _pr_main },
{ "printf", _printf_main },
{ "ps", _ps_main },
{ "pwd", _pwd_main },
{ "renice", _renice_main },
{ "rm", _rm_main },