From ae31e19f92e717919ac8e3db9039eb38d2b89aae Mon Sep 17 00:00:00 2001 From: in2 Date: Thu, 7 Mar 2002 15:13:44 +0000 Subject: Initial revision git-svn-id: http://opensvn.csie.org/pttbbs/pttbbs/trunk/pttbbs@1 63ad8ddf-47c3-0310-b6dd-a9e9d9715204 --- util/shmsweep.c | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 util/shmsweep.c (limited to 'util/shmsweep.c') diff --git a/util/shmsweep.c b/util/shmsweep.c new file mode 100644 index 00000000..01acb26b --- /dev/null +++ b/util/shmsweep.c @@ -0,0 +1,43 @@ +#include +#include +#include +#include +#include +#include +#include "config.h" +#include "pttstruct.h" + +int main() { + int i, shm, counter; + struct utmpfile_t *utmpshm; + + + shm = shmget(UTMPSHM_KEY, USHM_SIZE, SHM_R | SHM_W); + if(shm == -1) { + perror("shmget"); + exit(0); + } + + utmpshm = shmat(shm, NULL, 0); + if(utmpshm == (struct utmpfile_t *)-1) { + perror("shmat"); + exit(0); + } + + for(i = counter = 0; i < USHM_SIZE; i++) + if(utmpshm->uinfo[i].pid) { + char buf[256]; + userinfo_t *f; + struct stat sb; + + f = &utmpshm->uinfo[i]; + sprintf(buf, "/proc/%d", f->pid); + if(stat(buf, &sb)) { + f->pid = 0; + utmpshm->number--; + counter++; + } + } + printf("clear %d slots\n", counter); + return 0; +} -- cgit v1.2.3