summaryrefslogtreecommitdiff
path: root/include/glibtop/procopenfiles.h
blob: 42847965c2d29725db798e27251df0290e960b21 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
/* Copyright (C) 1998-99 Martin Baulig
   Copyright (C) 2004 Nicolás Lichtmaier
   This file is part of LibGTop 1.0.

   Contributed by Martin Baulig <martin@home-of-linux.org>, April 1998.

   Modified by Nicolás Lichtmaier to give open process files.

   LibGTop is free software; you can redistribute it and/or modify it
   under the terms of the GNU General Public License as published by
   the Free Software Foundation; either version 2 of the License,
   or (at your option) any later version.

   LibGTop is distributed in the hope that it will be useful, but WITHOUT
   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
   FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
   for more details.

   You should have received a copy of the GNU General Public License
   along with LibGTop; see the file COPYING. If not, write to the
   Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
   Boston, MA 02110-1301, USA.
*/

#ifndef __GLIBTOP_PROC_OPEN_FILES_H__
#define __GLIBTOP_PROC_OPEN_FILES_H__

#include <glibtop.h>
#include <glibtop/global.h>


G_BEGIN_DECLS

#define GLIBTOP_PROC_OPEN_FILES_NUMBER		0
#define GLIBTOP_PROC_OPEN_FILES_TOTAL		1
#define GLIBTOP_PROC_OPEN_FILES_SIZE		2

#define GLIBTOP_MAX_PROC_OPEN_FILES		3

#define GLIBTOP_FILE_ENTRY_FD				0
#define GLIBTOP_FILE_ENTRY_NAME				1
#define GLIBTOP_FILE_ENTRY_TYPE				2
#define GLIBTOP_FILE_ENTRY_INETSOCKET_DST_HOST		3
#define GLIBTOP_FILE_ENTRY_INETSOCKET_DST_PORT		4

#define GLIBTOP_MAX_OPEN_FILE_ENTRY		5

#define GLIBTOP_OPEN_FILENAME_LEN	215
 /* ready for IPv6 */
#define GLIBTOP_OPEN_DEST_HOST_LEN	46

enum glibtop_file_type {
	GLIBTOP_FILE_TYPE_FILE		= 1,
	GLIBTOP_FILE_TYPE_PIPE		= 2,
	GLIBTOP_FILE_TYPE_INETSOCKET	= 4,
	GLIBTOP_FILE_TYPE_LOCALSOCKET	= 8,
	GLIBTOP_FILE_TYPE_INET6SOCKET	= 16
};

typedef struct _glibtop_open_files_entry glibtop_open_files_entry;

typedef struct _glibtop_proc_open_files	glibtop_proc_open_files;

struct _glibtop_open_files_entry
{
	int fd;
	guint16 type; /* An "enum glibtop_file_type" value. */
	union {
		/* When type == GLIBTOP_FILE_TYPE_INETSOCKET or
		 * when type == GLIBTOP_FILE_TYPE_INET6SOCKET */
		struct {
			char dest_host[GLIBTOP_OPEN_DEST_HOST_LEN+1];
			int dest_port;
		} sock;

		/* When type == GLIBTOP_FILE_TYPE_FILE */
		struct {
			char name[GLIBTOP_OPEN_FILENAME_LEN+1];
		} file;

		/* When type == GLIBTOP_FILE_TYPE_LOCALSOCKET */
		struct {
			char name[GLIBTOP_OPEN_FILENAME_LEN+1];
		} localsock;

	} info;
};

struct _glibtop_proc_open_files
{
	guint64	flags;
	guint64 number;			/* GLIBTOP_PROC_OPEN_FILES_NUMBER */
	guint64 total;			/* GLIBTOP_PROC_OPEN_FILES_TOTAL  */
	guint64 size;			/* GLIBTOP_PROC_OPEN_FILES_SIZE   */
};

/**
 * glibtop_get_proc_open_files:
 * @buf:
 * @pid:
 *
 * Returns: (transfer full) (array zero-terminated=1):
 */

glibtop_open_files_entry *
glibtop_get_proc_open_files(glibtop_proc_open_files *buf, pid_t pid);

#if GLIBTOP_SUID_PROC_OPEN_FILES
#define glibtop_get_proc_open_files_r		glibtop_get_proc_open_files_p
#else
#define glibtop_get_proc_open_files_r		glibtop_get_proc_open_files_s
#endif


/**
 * glibtop_get_proc_open_files_l:
 * @server:
 * @buf: (out):
 * @pid:
 *
 * Returns: (transfer full) (array zero-terminated=1):
 */

glibtop_open_files_entry *
glibtop_get_proc_open_files_l (glibtop *server, glibtop_proc_open_files *buf, pid_t pid);

#if GLIBTOP_SUID_PROC_OPEN_FILES
void _glibtop_init_proc_open_files_p (glibtop *server);


/**
 * glibtop_get_proc_open_files_p:
 * @server:
 * @buf: (out):
 * @pid:
 *
 * Returns: (transfer full) (array zero-terminated=1):
 */

glibtop_open_files_entry *
glibtop_get_proc_open_files_p (glibtop *server, glibtop_proc_open_files *buf, pid_t pid);
#else
void _glibtop_init_proc_open_files_s (glibtop *server);

glibtop_open_files_entry *
glibtop_get_proc_open_files_s (glibtop *server, glibtop_proc_open_files *buf, pid_t pid);
#endif

GType     glibtop_open_files_entry_get_type (void) G_GNUC_CONST;
GType     glibtop_proc_open_files_get_type (void) G_GNUC_CONST;

G_END_DECLS

#endif