Re: strtonum(3)

看板DFBSD_submit作者時間21年前 (2004/07/28 14:32), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串4/8 (看更多)
This is a multi-part message in MIME format. --Multipart=_Tue__27_Jul_2004_15_02_22_-0700_B+XZw10u8uQw0G5A Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit On Mon, 26 Jul 2004 08:25:23 +0200 Jeroen Ruigrok/asmodai <asmodai@wxs.nl> wrote: > -On [20040726 08:12], Chris Pressey (cpressey@catseye.mine.nu) wrote: > >I like it, but I don't know what our official policy (if any) on > >stdlib API extensions is... assuming we're open to them, I'll be > >happy to handle this. > > Do I need to mention strlcat(), strlcpy() and such extensions? > > Just add it, this kind of stuff sets a precedent and we can then lobby > the C committee and the SUS/POSIX guys for extending the base > specifications since we are actively using it. 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); +} --Multipart=_Tue__27_Jul_2004_15_02_22_-0700_B+XZw10u8uQw0G5A--
文章代碼(AID): #111qXm00 (DFBSD_submit)
文章代碼(AID): #111qXm00 (DFBSD_submit)