Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

330
Vistas
Cómo detectar la presencia de la tarjeta SD en C++ en Linux

Buena tarde,

Estoy ejecutando un bucle simple para comprobar si se ha insertado o extraído la tarjeta SD, pero parece que no funciona correctamente todo el tiempo.

El problema es que, cuando el programa se inicia con la tarjeta SD insertada, la instrucción if(f.good()) es True .

Cuando se extrae la tarjeta SD, esta declaración es falsa .

Sin embargo, cuando se vuelve a insertar la tarjeta SD, esta afirmación sigue siendo Falsa .

¿Existe una forma más confiable en C ++ para detectar la presencia de la tarjeta SD? Estoy ejecutando Linux Yocto, basado en OpenEmbedded. Preferiría evitar el uso de bibliotecas externas y usar archivos IO o llamadas al sistema si es posible.

Gracias.

Mi bucle se muestra a continuación,

 while (running) { ifstream f("/dev/mmcblk1"); if (f.good()) { f.close(); if (!mounted) { system("mount /dev/mmcblk1p1 /mnt/Storage"); mounted = true; } sdPresent = true; } else { f.close(); sdPresent = false; mounted = false; } std::this_thread::sleep_for(std::chrono::milliseconds(500)); }
over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

La forma directa adecuada de saber si un dispositivo extraíble tiene un medio insertado es leer el tamaño del dispositivo de sysfs .

En su caso, estaría en algún lugar como /sys/block/mmcblk1/size . Ese archivo debe existir siempre y contener un valor unsigned long long . Si es 0 , entonces no hay medios; si es >0 , entonces tiene un medio de ese tamaño.

 bool has_media() { std::ifstream fsize("/sys/block/mmcblk1/size"); unsigned long long size; return (fsize >> size) && (size > 0); }

Si, en lugar de sondear y dormir, desea recibir notificaciones adecuadas de la inserción/eliminación de medios, y no desea/no puede usar libudev, entonces necesitará usar uevent y un socket de enlace de red. Vea esta excelente respuesta con los detalles.

over 4 years ago · Santiago Trujillo Denunciar

0

si la tarjeta SD es la única partición FAT32, simplemente puede hacer:

 fdisk -l | grep FAT32 | cut -c 1-8
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda