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