This is the mail archive of the
cygwin-patches
mailing list for the Cygwin project.
Re: [PATCH] implement /proc/sysvipc/*
- From: Corinna Vinschen <corinna-cygwin at cygwin dot com>
- To: cygwin-patches at cygwin dot com
- Date: Fri, 1 Apr 2011 12:05:56 +0200
- Subject: Re: [PATCH] implement /proc/sysvipc/*
- References: <1301650256.3108.4.camel@YAAKOV04>
- Reply-to: cygwin-patches at cygwin dot com
On Apr 1 04:30, Yaakov (Cygwin/X) wrote:
> These patches implement /proc/sysvipc/*, as found on Linux[1]:
>
> $ ls -l /proc
> [...]
> dr-xr-xr-x 2 Yaakov None 0 Apr 1 04:12 sysvipc/
> [...]
>
> $ ls -l /proc/sysvipc
> total 0
> -r--r--r-- 1 Yaakov None 0 Apr 1 04:12 msg
> -r--r--r-- 1 Yaakov None 0 Apr 1 04:12 sem
> -r--r--r-- 1 Yaakov None 0 Apr 1 04:12 shm
>
> # yes, these lines are very long
> $ cat /proc/sysvipc/shm
> key shmid perms size cpid lpid nattch uid gid cuid cgid atime dtime ctime
> 0 196608 6600 393216 4960 4996 2 1001 513 1001 513 1301639749 0 1301639749
> 0 65537 6600 393216 4916 4996 2 1001 513 1001 513 1301639750 0 1301639750
> [...]
>
> If cygserver is not running, then the /proc/sysvipc directory still
> exists but readdir()s as empty, and the files therein are nonexistent:
>
> $ ls /proc/sysvipc/
>
> $ ls /proc/sysvipc/shm
> ls: cannot access /proc/sysvipc/sem: No such file or directory
>
> $ cat /proc/sysvipc/shm
> cat: /proc/sysvipc/shm: No such file or directory
>
> The code uses some hints from the Cygwin modifications to ipcs(1).
>
> Patch and new file for winsup/cygwin, and patch for winsup/doc attached.
>
>
> Yaakov
>
>
> [1] http://docs.redhat.com/docs/en-US/Red_Hat_Enterprise_Linux/4/html/Reference_Guide/s2-proc-dir-sysvipc.html
>
> 2011-04-01 Yaakov Selkowitz <...>
>
> * new-features.sgml (ov-new1.7.10): Document /proc/sysvipc/.
>
> 2011-04-01 Yaakov Selkowitz <...<
>
> Implement /proc/sysvipc/*
> * devices.in (dev_procsysvipc_storage): Add.
> * devices.cc: Regenerate.
> * devices.h (fh_devices): Add FH_PROCSYSVIPC.
> * dtable.cc (build_fh_pc): Add case FH_PROCSYSVIPC.
> * fhandler.h (class fhandler_procsysvipc): Declare.
> (fhandler_union): Add __procsysvipc.
> * fhandler_proc.cc (proc_tab): Add sysvipc virt_directory.
> * fhandler_procsysvipc.cc: New file.
> * Makefile.in (DLL_OFILES): Add fhandler_procsysvipc.o.
> * path.h (isproc_dev): Add FH_PROCSYSVIPC to conditional.
Cool stuff. Thanks for this patch. However, your patch shows a
problem:
> Index: path.h
> ===================================================================
> RCS file: /cvs/src/src/winsup/cygwin/path.h,v
> retrieving revision 1.154
> diff -u -r1.154 path.h
> --- path.h 17 Jan 2011 14:19:39 -0000 1.154
> +++ path.h 20 Feb 2011 08:24:53 -0000
> @@ -19,7 +19,7 @@
>
> #define isproc_dev(devn) \
> (devn == FH_PROC || devn == FH_REGISTRY || devn == FH_PROCESS || \
> - devn == FH_PROCNET || devn == FH_PROCSYS)
> + devn == FH_PROCNET || devn == FH_PROCSYS || devn == FH_PROCSYSVIPC)
The definition of isproc_dev starts to get on my nerves. We have to
check for six distinct values now. I think we should really change
the definition. Here's what we have in devices.h right now:
FH_PROC = FHDEV (0, 250),
FH_REGISTRY= FHDEV (0, 249),
FH_PROCESS = FHDEV (0, 248),
FH_FS = FHDEV (0, 247), /* filesystem based device */
FH_NETDRIVE= FHDEV (0, 246),
FH_DEV = FHDEV (0, 245),
FH_PROCNET = FHDEV (0, 244),
FH_PROCESSFD = FHDEV (0, 243),
FH_PROCSYS = FHDEV (0, 242),
FH_PROCSYSVIPC = FHDEV (0, 241),
Chris, do you think there's anything speaking against rearranging this
so that the FH_FS and FH_NETDRIVE definitions are separate from the
stuff under /proc? Or, hang on, we should change all PROC values,
along these lines:
FH_FS = FHDEV (0, 247), /* filesystem based device */
FH_NETDRIVE= FHDEV (0, 246),
FH_DEV = FHDEV (0, 245),
FH_PROC = FHDEV (0, 244),
FH_REGISTRY= FHDEV (0, 243),
FH_PROCESS = FHDEV (0, 242),
FH_PROCNET = FHDEV (0, 241),
FH_PROCESSFD = FHDEV (0, 240),
FH_PROCSYS = FHDEV (0, 239),
FH_PROCSYSVIPC = FHDEV (0, 238),
FH_PROC_MIN_MINOR = FHDEV (0, 200), /* Arbitrary value */
Then we can simplify the isproc_dev definition like this:
#define isproc_dev(devn) \
(devn >= FH_PROC_MIN_MINOR && devn <= FH_PROC)
Does that sound ok?
Corinna
--
Corinna Vinschen Please, send mails regarding Cygwin to
Cygwin Project Co-Leader cygwin AT cygwin DOT com
Red Hat