From: Werner Koch <wk@gnupg.org>
To: Eli Zaretskii <eliz@gnu.org>
Cc: ueno@gnu.org, emacs-devel@gnu.org
Subject: Re: pipe
Date: Sat, 14 Mar 2015 12:51:00 +0100 [thread overview]
Message-ID: <87d24bdcgr.fsf@vigenere.g10code.de> (raw)
In-Reply-To: <83d24c2c2p.fsf@gnu.org> (Eli Zaretskii's message of "Sat, 14 Mar 2015 10:54:54 +0200")
On Sat, 14 Mar 2015 09:54, eliz@gnu.org said:
> Thanks, but where do I see the source of that wrapper? I tried the
> gpg Git repo, but I don't think I see it there. Did I miss something?
It is in gpgme, a library interface to gnupg:
git://git.gnupg.org/gpgme.git
The wrapper is src/gpgme_w32spawn.c and the code in gpgme is in
src/w32-io.c (and src/w32-util.c). However if you also link to glib the
used code is w32-glib-io.c.
> And anyway, how does this wrapper solve the problem of invoking gpg
> with the --status-fd, --command-fd, and --attribute-fd options? IOW,
> how can the invoking program pass file descriptors on the gpg command
> line, and be sure gpg will use the same files/devices as the caller?
Use gpgme ;-)
Simply use "--status-fd HANDLE" or if gpg expects a filename use the
option --enable-special-filenames which interprets filename of the form
"-&N" as the handle N.
Under Windows we use a HANDLE and not a file descriptor. Thus ReadFile
and WriteFile is used. Using the libc file handles is not a good idea.
The problem in gpg is that this is all mapped to an "int" and thus we
can't easily change this to a 64 bit Windows because a HANDLE is a
pointer and sizeof(void*) > sizeof(int). There are too many different
objects in Windows with the same function but they are not all the
same. Using a kernel object like HANDLE is the only clean solution.
> I'm guessing you actually mean "file handles", not "file descriptors"
> here. The latter are small integer numbers, like 0 for standard
What I mean is that WindowsCE(!) has no global file descriptor table.
There is only the per-process one. But WindowsCE is entirely different
form Windows. They only share the the same API with lot of properties
not implemented.
> like 6 be passed to gpg -- AFAIK it will end up connected to nothing
> on the child side. (There's an undocumented trick in the MSVC runtime
You create a pipe using CreatePipe and make one end inheritable using
DuplicateHandle. See gpgme/src/w32-io.c - it is a bit complicated due
to the fact that you can't select (WaitForMultipleObjects) on HANDLEs.
IIRC, with Windows 7 there are newer APIs which could be used instead of
the select emulation using I/O threads.
> that allows this to work, but AFAIK that doesn't work with MinGW, only
Nope. It is all specified by the Win32 API. If you are interest in
details on this I suggest to read Hart's Windows System Programming. I
consider this the Windows counterpart to APUE.
Shalom-Salam,
Werner
--
Die Gedanken sind frei. Ausnahmen regelt ein Bundesgesetz.
next prev parent reply other threads:[~2015-03-14 11:51 UTC|newest]
Thread overview: 84+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-03-13 9:01 pipe Daiki Ueno
2015-03-13 10:59 ` pipe Eli Zaretskii
2015-03-13 12:29 ` pipe Daiki Ueno
2015-03-13 20:08 ` pipe Werner Koch
2015-03-14 8:54 ` pipe Eli Zaretskii
2015-03-14 11:51 ` Werner Koch [this message]
2015-03-14 13:42 ` pipe Eli Zaretskii
2015-03-14 19:28 ` pipe Werner Koch
2015-03-14 20:34 ` pipe Eli Zaretskii
2015-03-17 7:22 ` pipe Daiki Ueno
2015-03-17 8:47 ` pipe Eli Zaretskii
2015-03-13 12:45 ` pipe Stefan Monnier
2015-03-13 13:10 ` pipe Daiki Ueno
2015-03-16 5:42 ` [PATCH] Generalize start-process with keyword args Daiki Ueno
2015-03-16 13:34 ` Stefan Monnier
2015-03-17 2:16 ` Daiki Ueno
2015-03-17 3:13 ` Stefan Monnier
2015-03-17 3:39 ` Daiki Ueno
2015-03-17 15:35 ` Stefan Monnier
2015-03-17 15:42 ` Eli Zaretskii
2015-03-17 18:08 ` Stefan Monnier
2015-03-17 18:19 ` Eli Zaretskii
2015-03-17 21:36 ` Stefan Monnier
2015-03-18 3:47 ` Eli Zaretskii
2015-03-18 6:17 ` Daiki Ueno
2015-03-18 7:37 ` [PATCH] Add facility to collect stderr of async subprocess Daiki Ueno
2015-03-18 16:25 ` Eli Zaretskii
2015-03-31 7:27 ` Daiki Ueno
2015-03-31 12:55 ` Eli Zaretskii
2015-04-08 0:21 ` Daiki Ueno
2015-04-08 0:47 ` Paul Eggert
2015-04-08 2:55 ` Daiki Ueno
2015-04-08 6:17 ` Eli Zaretskii
2015-04-08 6:20 ` Eli Zaretskii
2015-04-08 7:05 ` Daiki Ueno
2015-04-10 23:11 ` Daiki Ueno
2015-04-18 10:55 ` Ted Zlatanov
2016-10-05 4:33 ` Tino Calancha
2016-10-05 6:54 ` Eli Zaretskii
2016-10-05 7:10 ` Tino Calancha
2016-10-05 7:37 ` Eli Zaretskii
2016-10-05 16:22 ` John Wiegley
2016-10-06 3:13 ` Tino Calancha
2016-10-06 6:54 ` Eli Zaretskii
2016-10-06 7:25 ` Tino Calancha
2016-10-06 7:55 ` Eli Zaretskii
2016-10-06 8:37 ` Tino Calancha
2016-10-06 8:53 ` Eli Zaretskii
2016-10-06 9:13 ` Tino Calancha
2016-10-06 9:25 ` Michael Albinus
2016-10-06 9:45 ` Tino Calancha
2016-10-06 9:22 ` Michael Albinus
2016-10-06 7:15 ` Philipp Stephani
2016-10-06 7:42 ` Eli Zaretskii
2016-10-05 8:46 ` Alain Schneble
2016-10-05 9:15 ` Tino Calancha
2016-10-05 11:20 ` Michael Albinus
2016-10-05 17:24 ` Eli Zaretskii
2016-10-06 7:27 ` Michael Albinus
2015-04-08 5:56 ` Eli Zaretskii
2015-03-18 13:03 ` [PATCH] Generalize start-process with keyword args Stefan Monnier
2015-03-18 16:34 ` Eli Zaretskii
2015-03-19 7:36 ` Daiki Ueno
2015-03-19 13:32 ` Stefan Monnier
2015-03-23 7:36 ` Daiki Ueno
2015-03-18 16:23 ` Eli Zaretskii
2015-03-18 18:57 ` Stefan Monnier
2015-03-18 19:13 ` Eli Zaretskii
2015-03-17 7:50 ` Eli Zaretskii
2015-03-16 19:12 ` Andy Moreton
2015-03-16 19:40 ` Eli Zaretskii
2015-03-16 22:27 ` Andy Moreton
2015-03-17 0:39 ` Stefan Monnier
2015-03-17 7:15 ` Eli Zaretskii
2015-03-17 20:55 ` Andy Moreton
2015-03-17 21:15 ` Eli Zaretskii
2015-03-17 22:04 ` Andy Moreton
2015-03-19 16:34 ` Eli Zaretskii
2015-03-19 23:22 ` Andy Moreton
2015-03-20 14:03 ` Stefan Monnier
2015-03-17 21:42 ` Stefan Monnier
2015-03-13 14:54 ` pipe Eli Zaretskii
2015-03-13 15:28 ` pipe Daniel Colascione
2015-03-13 15:40 ` pipe Eli Zaretskii
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87d24bdcgr.fsf@vigenere.g10code.de \
--to=wk@gnupg.org \
--cc=eliz@gnu.org \
--cc=emacs-devel@gnu.org \
--cc=ueno@gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.