Estaba mirando libblkid y estaba confundido acerca de la documentación. ¿Podría alguien proporcionarme un ejemplo de cómo podría encontrar el UUID de una partición raíz de Linux utilizando esta biblioteca?Usando libblkid para encontrar UUID de una partición
Respuesta
Es casi tan simple como lo hace el manual: crea una estructura de sonda, la inicializa, le pide cierta información y luego la libera. Y puedes combinar los dos primeros pasos en uno. Se trata de un programa de trabajo:
#include <stdio.h>
#include <stdlib.h>
#include <err.h>
#include <blkid/blkid.h>
int main (int argc, char *argv[]) {
blkid_probe pr;
const char *uuid;
if (argc != 2) {
fprintf(stderr, "Usage: %s devname\n", argv[0]);
exit(1);
}
pr = blkid_new_probe_from_filename(argv[1]);
if (!pr) {
err(2, "Failed to open %s", argv[1]);
}
blkid_do_probe(pr);
blkid_probe_lookup_value(pr, "UUID", &uuid, NULL);
printf("UUID=%s\n", uuid);
blkid_free_probe(pr);
return 0;
}
blkid_probe_lookup_value
conjuntos uuid
que apuntan a una cadena que pertenece a la estructura pr
, por lo que el argumento es de tipo const char *
. Si necesita hacerlo, puede copiarlo en un char *
que administre por su cuenta, pero para pasar al printf
, no es necesario. El cuarto argumento para blkid_probe_lookup_value
le permite obtener la longitud del valor devuelto en caso de que necesite eso también. Hay algunas diferencias sutiles entre blkid_do_probe
, blkid_do_safeprobe
y blkid_do_fullprobe
, pero en los casos en que el dispositivo tiene un sistema de archivos conocido y usted solo quiere extraer el UUID de él, debe hacer el primer resultado del blkid_do_probe
.
Primero debe encontrar el dispositivo montado como raíz. Ver man getmntent (3). Una vez que conozca el dispositivo, use blkid_new_probe_from_filename como se describe en hobbs.
#include <stdio.h>
#include <mntent.h>
int main() {
FILE* fstab = setmntent("/etc/mtab", "r");
struct mntent *e;
const char *devname = NULL;
while ((e = getmntent(fstab))) {
if (strcmp("/", e->mnt_dir) == 0) {
devname = e->mnt_fsname;
break;
}
}
printf("root devname is %s\n", devname);
endmntent(fstab);
return 0;
}
Esto es muy útil, lo estoy combinando con la publicación de Hobbs y veré qué sucede. Gracias – HighLife
- 1. partición función count() OVER posible usando DISTINCT
- 2. Biblioteca de UUID para C?
- 3. Buscar duplicados usando Clasificación sobre la partición
- 4. UUID persistente en PostgreSQL usando JPA
- 5. Usando jQuery para encontrar una subcadena
- 6. UUID para aplicación en IOS5
- 7. Partición de tablas existentes
- 8. Partición triangular
- 9. PHP preg_match UUID v4
- 10. Optimización de una función de partición
- 11. ¿Cómo encontrar el UUID del puerto serie del dispositivo Bluetooth?
- 12. El problema de partición
- 13. Generar UUID para Cassandra en Python
- 14. Cómo crear un GUID/UUID usando el SDK de iPhone
- 15. Algoritmo de retroceso recursivo para resolver el problema de partición
- 16. estándar para resolver una urna: uuid (y otro)?
- 17. XSLT generar UUID
- 18. recorte uuid más para hacer cadena corta
- 19. Algoritmo de partición QuickSort
- 20. UUID en CouchDB
- 21. Partición de un grafo dirigido
- 22. Generar una cadena UUID con ARC habilitado
- 23. Postgres + Hibernate + UUID de Java
- 24. Claves foráneas vs partición
- 25. Obtener UUID sin iTunes
- 26. Generador de UUID de Delphi
- 27. Algoritmo de partición de espacio
- 28. CFUUIDCreate UUID cambia constantemente
- 29. vim + C++: inserte un uuid en una cláusula de guardia
- 30. ¿Cuánto espacio debería dejar para mi partición de Windows 7?
Este ejemplo requiere que ingrese la partición como argumento correcto? ¿Cómo verificaría el UUID de la partición ROOT? – HighLife
Defina "la partición ROOT". El dispositivo montado en '/'? – hobbs
sí el dispositivo montado en/ – HighLife