strtonum(3)
Matthew Dillon
dillon at apollo.backplane.com
Tue Jul 27 22:28:35 PDT 2004
Mmm. Well, I dunno about that. It might get a little to down into the
guts of UNIX to be a stdio function.
-Matt
Matthew Dillon
<dillon at xxxxxxxxxxxxx>
:In that case, I propose adding an extension to obtain the pid of the
:process on the other end of a popen()'ed stream; see attached patch.
:This information is currently impossible to get at without rolling your
:own custom popen/pclose functions (which I had to do in the installer.)
:
:-Chris
:
:
:--Multipart=_Tue__27_Jul_2004_15_02_22_-0700_B+XZw10u8uQw0G5A
:Content-Type: text/plain;
: name="pgetpid.diff"
:Content-Disposition: attachment;
: filename="pgetpid.diff"
:Content-Transfer-Encoding: 7bit
:
:Index: include/stdio.h
:===================================================================
:RCS file: /home/dcvs/src/include/stdio.h,v
:retrieving revision 1.5
:diff -u -r1.5 stdio.h
:--- include/stdio.h 15 Nov 2003 19:28:42 -0000 1.5
:+++ include/stdio.h 26 Jul 2004 19:19:44 -0000
:@@ -49,6 +49,11 @@
: #include <machine/stdarg.h>
: #endif
:
:+#ifndef _PID_T_DECLARED
:+#define _PID_T_DECLARED
:+typedef __pid_t pid_t; /* process id */
:+#endif
:+
: #ifndef _SIZE_T_DECLARED
: #define _SIZE_T_DECLARED
: typedef __size_t size_t;
:@@ -313,6 +318,7 @@
: __off_t ftello (FILE *);
: int getw (FILE *);
: int pclose (FILE *);
:+pid_t pgetpid (FILE *);
: FILE *popen (const char *, const char *);
: int putw (int, FILE *);
: void setbuffer (FILE *, char *, int);
:Index: sys/sys/types.h
:===================================================================
:RCS file: /home/dcvs/src/sys/sys/types.h,v
:retrieving revision 1.6
:diff -u -r1.6 types.h
:--- sys/sys/types.h 15 Nov 2003 19:28:42 -0000 1.6
:+++ sys/sys/types.h 26 Jul 2004 19:19:28 -0000
:@@ -82,7 +82,6 @@
: typedef __uint16_t mode_t; /* permissions */
: typedef __uint16_t nlink_t; /* link count */
: typedef __off_t off_t; /* file offset */
:-typedef __pid_t pid_t; /* process id */
: typedef quad_t rlim_t; /* resource limit */
: typedef __int32_t segsz_t; /* segment size */
: typedef __int32_t swblk_t; /* swap offset */
:@@ -131,6 +130,11 @@
: typedef __clockid_t clockid_t;
: #endif
:
:+#ifndef _PID_T_DECLARED
:+#define _PID_T_DECLARED
:+typedef __pid_t pid_t; /* process id */
:+#endif
:+
: #ifndef _SIZE_T_DECLARED
: #define _SIZE_T_DECLARED
: typedef __size_t size_t;
:Index: lib/libc/gen/popen.3
:===================================================================
:RCS file: /home/dcvs/src/lib/libc/gen/popen.3,v
:retrieving revision 1.2
:diff -u -r1.2 popen.3
:--- lib/libc/gen/popen.3 17 Jun 2003 04:26:42 -0000 1.2
:+++ lib/libc/gen/popen.3 27 Jul 2004 21:50:40 -0000
:@@ -33,12 +33,13 @@
: .\" $FreeBSD: src/lib/libc/gen/popen.3,v 1.10.2.4 2003/03/15 15:11:05 trhodes Exp $
: .\" $DragonFly: src/lib/libc/gen/popen.3,v 1.2 2003/06/17 04:26:42 dillon Exp $
: .\"
:-.Dd May 3, 1995
:+.Dd Jul 27, 2004
: .Dt POPEN 3
: .Os
: .Sh NAME
: .Nm popen ,
:-.Nm pclose
:+.Nm pclose ,
:+.Nm pgetpid
: .Nd process
: .Tn I/O
: .Sh LIBRARY
:@@ -49,6 +50,8 @@
: .Fn popen "const char *command" "const char *type"
: .Ft int
: .Fn pclose "FILE *stream"
:+.Ft pid_t
:+.Fn pgetpid "FILE *stream"
: .Sh DESCRIPTION
: The
: .Fn popen
:@@ -124,6 +127,12 @@
: and returns the exit status of the command
: as returned by
: .Fn wait4 .
:+.Pp
:+The
:+.Fn pgetpid
:+function returns the pid of the process on the other end of a stream that
:+was opened with
:+.Fn popen .
: .Sh RETURN VALUES
: The
: .Fn popen
:@@ -145,11 +154,20 @@
: .Dq popened
: command, if
: .Fa stream
:-already
:+has already been
: .Dq pclosed ,
: or if
: .Xr wait4
: returns an error.
:+.Pp
:+The
:+.Fn pgetpid
:+function returns (pid_t)\-1 if
:+.Fa stream
:+is not associated with a
:+.Dq popened
:+command or if it has already been
:+.Dq pclosed .
: .Sh ERRORS
: The
: .Fn popen
:@@ -200,3 +218,7 @@
: .Pp
: Bidirectional functionality was added in
: .Fx 2.2.6 .
:+The
:+.Fn pgetpid
:+function appeared in
:+.Dx 1.1 .
:Index: lib/libc/gen/popen.c
:===================================================================
:RCS file: /home/dcvs/src/lib/libc/gen/popen.c,v
:retrieving revision 1.3
:diff -u -r1.3 popen.c
:--- lib/libc/gen/popen.c 6 Jun 2004 15:05:55 -0000 1.3
:+++ lib/libc/gen/popen.c 26 Jul 2004 19:03:19 -0000
:@@ -188,3 +188,14 @@
:
: return (pid == -1 ? -1 : pstat);
: }
:+
:+pid_t
:+pgetpid(FILE *iop)
:+{
:+ struct pid *cur;
:+
:+ for (cur = pidlist; cur != NULL; cur = cur->next)
:+ if (cur->fp == iop)
:+ return (cur->pid);
:+ return (-1);
:+}
More information about the Submit
mailing list