68d20fd9b3d9752c9c19dfb0211527cff7b9424b
[gpgme.git] / gpgme / io.h
1 /* io.h - Interface to the I/O functions.
2  *      Copyright (C) 2000 Werner Koch (dd9jn)
3  *      Copyright (C) 2001, 2002 g10 Code GmbH
4  *
5  * This file is part of GPGME.
6  *
7  * GPGME is free software; you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License as published by
9  * the Free Software Foundation; either version 2 of the License, or
10  * (at your option) any later version.
11  *
12  * GPGME is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with this program; if not, write to the Free Software
19  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
20  */
21
22 #ifndef IO_H
23 #define IO_H
24
25 #include "types.h"
26
27 /* A single file descriptor passed to spawn.  For child fds, dup_to
28    specifies the fd it should become in the child.  */
29 struct spawn_fd_item_s
30 {
31   int fd;
32   int dup_to;
33 };
34
35 struct io_select_fd_s
36 {
37   int fd;
38   int for_read;
39   int for_write;
40   int signaled;
41   int frozen;
42   void *opaque;
43 };
44
45 /* These function are either defined in posix-io.c or w32-io.c.  */
46 int _gpgme_io_read (int fd, void *buffer, size_t count);
47 int _gpgme_io_write (int fd, const void *buffer, size_t count);
48 int _gpgme_io_pipe (int filedes[2], int inherit_idx);
49 int _gpgme_io_close (int fd);
50 int _gpgme_io_set_close_notify (int fd, void (*handler) (int, void *),
51                                 void *value);
52 int _gpgme_io_set_nonblocking (int fd);
53
54 /* Spawn the executable PATH with ARGV as arguments, after forking
55    close all fds in FD_PARENT_LIST in the parent and close or dup all
56    fds in FD_CHILD_LIST in the child.  */
57 int _gpgme_io_spawn (const char *path, char **argv,
58                      struct spawn_fd_item_s *fd_child_list,
59                      struct spawn_fd_item_s *fd_parent_list);
60 int _gpgme_io_waitpid (int pid, int hang, int *r_status, int *r_signal);
61 int _gpgme_io_kill (int pid, int hard);
62 int _gpgme_io_select (struct io_select_fd_s *fds, size_t nfds, int nonblock);
63
64 #endif /* IO_H */
65
66
67