[lvm-devel] [PATCH] Add lvm2app example to docs directory.

Dave Wysochanski dwysocha at redhat.com
Wed Sep 15 15:27:41 UTC 2010


Add a simple example of using lvm2app to enumerate the system's
VGs, LVs, and PVs.
Build as follows (I tried on f13):
$ gcc example_lvm2app.c -llvm2app -ldevmapper

Signed-off-by: Dave Wysochanski <dwysocha at redhat.com>
---
 doc/example_lvm2app.c |   87 +++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 87 insertions(+), 0 deletions(-)
 create mode 100644 doc/example_lvm2app.c

diff --git a/doc/example_lvm2app.c b/doc/example_lvm2app.c
new file mode 100644
index 0000000..5feba33
--- /dev/null
+++ b/doc/example_lvm2app.c
@@ -0,0 +1,87 @@
+/*
+ * Copyright (C) 2010 Red Hat, Inc. All rights reserved.
+ *
+ * This file is part of LVM2.
+ *
+ * This copyrighted material is made available to anyone wishing to use,
+ * modify, copy, or redistribute it subject to the terms and conditions
+ * of the GNU General Public License v.2.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+#include "lvm2app.h"
+#include <stdio.h>
+
+static void _process_vg(lvm_t lvm, vg_t vg)
+{
+	struct dm_list *lvs, *pvs;
+	struct lvm_pv_list *pvl;
+	struct lvm_lv_list *lvl;
+
+	if (!vg) {
+		fprintf(stderr, "Error opening volume group");
+		return;
+	}
+	printf("vg_name: %s, vg_uuid: %s\n", lvm_vg_get_name(vg),
+	       lvm_vg_get_uuid(vg));
+	pvs = lvm_vg_list_pvs(vg);
+	if (!pvs && lvm_errno(lvm)) {
+		fprintf(stderr, "lvm_vg_list_pvs() failed\n");
+		return;
+	} else if (!pvs) {
+		fprintf(stdout, "- No PVs, error!\n");
+		return;
+	}
+	dm_list_iterate_items(pvl, pvs) {
+		printf("- pv_name: %s, pv_uuid: %s\n",
+			lvm_pv_get_name(pvl->pv), lvm_pv_get_uuid(pvl->pv));
+	}
+	lvs = lvm_vg_list_lvs(vg);
+	if (!lvs && lvm_errno(lvm)) {
+		fprintf(stderr, "lvm_vg_list_lvs() failed\n");
+		return;
+	} else if (!lvs) {
+		fprintf(stdout, "- No LVs\n");
+		return;
+	}
+	dm_list_iterate_items(lvl, lvs) {
+		printf("- lv_name: %s, lv_uuid: %s\n",
+			lvm_lv_get_name(lvl->lv), lvm_lv_get_uuid(lvl->lv));
+	}
+}
+
+int main(int argc, char *argv[])
+{
+	lvm_t lvm;
+	vg_t vg;
+	struct dm_list *vgnames;
+	struct lvm_str_list *strl;
+
+	lvm = lvm_init(NULL);
+	if (!lvm) {
+		fprintf(stderr, "lvm_init() failed\n");
+		goto bad;
+	}
+
+	printf("Library version: %s\n", lvm_library_get_version());
+	vgnames = lvm_list_vg_names(lvm);
+	if (!vgnames) {
+		fprintf(stderr, "lvm_list_vg_names() failed\n");
+		goto bad;
+	}
+	dm_list_iterate_items(strl, vgnames) {
+		printf("Opening volume group %s\n", strl->str);
+		vg = lvm_vg_open(lvm, strl->str, "r", 0);
+		_process_vg(lvm, vg);
+		lvm_vg_close(vg);
+	}
+	lvm_quit(lvm);
+	exit(0);
+bad:
+	if (lvm)
+		lvm_quit(lvm);
+	exit(-1);
+}
-- 
1.7.2.1




More information about the lvm-devel mailing list