blob: 4aea1b6cd734bf0067b366d1341482660309f732 [file] [log] [blame]
Theodore Ts'o28595222003-03-01 20:01:27 -05001libblkid - a library to handle device identification and token extraction
2
3Basic usage is as follows - there are two normal usage patterns:
4
5For cases where a program wants information about multiple devices, or
Theodore Ts'oe7a8a9d2003-07-21 20:03:59 -04006expects to be doing multiple token searches, the program should
7directly initialize cache file via (second parameter is cache
8filename, NULL = default):
Theodore Ts'o28595222003-03-01 20:01:27 -05009
10 blkid_cache cache = NULL;
11 if (blkid_get_cache(&cache, NULL) < 0)
12 /* error reading the cache file, not really fatal */
13
Theodore Ts'oe7a8a9d2003-07-21 20:03:59 -040014Note that if no cache file exists, an empty cache struct is still
15allocated. Usage of libblkid functions will use the cache to avoid
16needless device scans.
Theodore Ts'o28595222003-03-01 20:01:27 -050017
Theodore Ts'oe7a8a9d2003-07-21 20:03:59 -040018The model of the blkid cache is that each device has a number of
19attributes that can be associated with it. Currently the attributes
20which are supported (and set) by blkid are:
21
22 TYPE filesystem type
23 UUID filesystem uuid
24 LABEL filesystem label
Theodore Ts'o28595222003-03-01 20:01:27 -050025
26
Theodore Ts'oe7a8a9d2003-07-21 20:03:59 -040027How to use libblkid? Normally, you either want to find a device with
28a specific NAME=value token, or you want to output token(s) from a
29device. To find a device that matches a following attribute, you
30simply call the blkid_get_devname() function:
Theodore Ts'o28595222003-03-01 20:01:27 -050031
Theodore Ts'oe7a8a9d2003-07-21 20:03:59 -040032 if ((devname = blkid_get_devname(cache, attribute_name, value))) {
Theodore Ts'o28595222003-03-01 20:01:27 -050033 /* do something with devname */
34 string_free(devname);
35 }
36
Theodore Ts'oe7a8a9d2003-07-21 20:03:59 -040037The cache parameter is optional; if it is NULL, then the blkid library
Theodore Ts'oc8407312005-01-07 22:47:20 -050038will load the default blkid.tab cache file, and then release the cache
Theodore Ts'oe7a8a9d2003-07-21 20:03:59 -040039before function call returns. The return value is an allocated string
40which holds the resulting device name (if it is found). If the value
41is NULL, then attribute_name is parsed as if it were
42"<attribute_name>=<value>"; if it cannot be so parsed, then the
43original attribute_name is returned in a copied allocated string.
44This is a convenience to allow user programs to want to translate user
45input, whether it is of the form: "/dev/hda1", "LABEL=root",
46"UUID=082D-26E3", and get back a device name that it can use.
Theodore Ts'o28595222003-03-01 20:01:27 -050047
Theodore Ts'oe7a8a9d2003-07-21 20:03:59 -040048Alternatively, of course, the programmer can pass an attribute name of
49"LABEL", and value of "root", if that is more convenient.
Theodore Ts'o28595222003-03-01 20:01:27 -050050
Theodore Ts'oe7a8a9d2003-07-21 20:03:59 -040051Another common usage is to retrieve the value of a specific attribute
Theodore Ts'oc8407312005-01-07 22:47:20 -050052for a particular device. This can be used to determine the filesystem
53type, or label, or uuid for a particular device:
Theodore Ts'oe7a8a9d2003-07-21 20:03:59 -040054
55 if ((value = blkid_get_tag_value(cache, attribute_name, devname))) {
Theodore Ts'o28595222003-03-01 20:01:27 -050056 /* do something with value */
57 string_free(value);
58 }
59
Theodore Ts'oc8407312005-01-07 22:47:20 -050060If a program needs to call multiple blkid functions, then passing in a
Theodore Ts'oe7a8a9d2003-07-21 20:03:59 -040061cache value of NULL is not recommended, since the /etc/blkid.tab file
Theodore Ts'oc8407312005-01-07 22:47:20 -050062will be repeatedly parsed over and over again, with memory allocated
Theodore Ts'oe7a8a9d2003-07-21 20:03:59 -040063and deallocated. To initialize the blkid cache, blkid_get_cache()
64function is used:
65
66 if (blkid_get_cache(&cache, NULL) < 0)
67 goto errout;
68
69The second parameter of blkid_get_cache (if non-zero) is the alternate
70filename of the blkid cache file (where the default is
71/etc/blkid.tab). Normally, programs should just pass in NULL.
72
Theodore Ts'oc8407312005-01-07 22:47:20 -050073If you have called blkid_get_cache(), you should call blkid_put_cache()
74when you are done using the blkid library functions. This will save the
75cache to the blkid.tab file, if you have write access to the file. It
76will also free all associated devices and tags:
Theodore Ts'o28595222003-03-01 20:01:27 -050077
Theodore Ts'oc8407312005-01-07 22:47:20 -050078 blkid_put_cache(cache);