libc: implement getppid() reading /proc/$pid/ppid instead of /dev/ppid
The devcons driver is really the wrong place to serve per process information.
This commit is contained in:
parent
d919ad3b5e
commit
672cf179a1
|
@ -13,27 +13,18 @@ int getpid(void)
|
|||
int getppid(void)
|
||||
.SH DESCRIPTION
|
||||
.I Getpid
|
||||
reads
|
||||
.B /dev/pid
|
||||
(see
|
||||
.IR cons (3))
|
||||
and converts it to get the process id of the current process,
|
||||
returns the process id of the current process,
|
||||
a number guaranteed to be unique among all running processes on the machine
|
||||
executing
|
||||
.IR getpid .
|
||||
.PP
|
||||
.I Getppid
|
||||
reads
|
||||
.B /dev/ppid
|
||||
(see
|
||||
.IR cons (3))
|
||||
and converts it to get the id of the parent of the current process.
|
||||
returns the process id of the parent of the current process.
|
||||
.SH SOURCE
|
||||
.B /sys/src/libc/9sys
|
||||
.SH SEE ALSO
|
||||
.IR intro (2),
|
||||
.IR exec (2),
|
||||
.IR cons (3),
|
||||
.IR proc (3)
|
||||
.SH DIAGNOSTICS
|
||||
Returns 0 and
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
#include <fcntl.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <unistd.h>
|
||||
#include <string.h>
|
||||
|
@ -9,14 +10,15 @@
|
|||
pid_t
|
||||
getppid(void)
|
||||
{
|
||||
char b[20];
|
||||
char buf[32];
|
||||
int f;
|
||||
|
||||
memset(b, 0, sizeof(b));
|
||||
f = _OPEN("/dev/ppid", OREAD);
|
||||
if(f >= 0) {
|
||||
_PREAD(f, b, sizeof(b), 0);
|
||||
_CLOSE(f);
|
||||
}
|
||||
return atol(b);
|
||||
snprintf(buf, sizeof(buf), "/proc/%d/ppid", getpid());
|
||||
f = open(buf, 0);
|
||||
if(f < 0)
|
||||
return 0;
|
||||
memset(buf, 0, sizeof(buf));
|
||||
read(f, buf, sizeof(buf)-1);
|
||||
close(f);
|
||||
return atol(buf);
|
||||
}
|
||||
|
|
|
@ -4,14 +4,15 @@
|
|||
int
|
||||
getppid(void)
|
||||
{
|
||||
char b[20];
|
||||
char buf[32];
|
||||
int f;
|
||||
|
||||
memset(b, 0, sizeof(b));
|
||||
f = open("/dev/ppid", OREAD|OCEXEC);
|
||||
if(f >= 0) {
|
||||
read(f, b, sizeof(b));
|
||||
snprint(buf, sizeof(buf), "/proc/%lud/ppid", (ulong)getpid());
|
||||
f = open(buf, OREAD|OCEXEC);
|
||||
if(f < 0)
|
||||
return 0;
|
||||
memset(buf, 0, sizeof(buf));
|
||||
read(f, buf, sizeof(buf)-1);
|
||||
close(f);
|
||||
}
|
||||
return atol(b);
|
||||
return atol(buf);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue