Creo que no puedes hacerlo portable, tal vez alguna libreria implemente las funciones de varios s.o.; te pongo un ejemplo rapido solo para windows:
Código:
//requiere windows.h
void scan_in_drives(unsigned int type) {
char *drives;
drives = malloc(1024);
memset(drives, 0, 1024);
GetLogicalDriveStrings(1024, drives);
while(strlen(drives)) {
if(GetDriveType(drives) == type) {
//ya tienes la letra de la unidad extraible
}
drives += (strlen(drives)+1);
}
free(drives);
}
//la llamada seria para buscar unidades no fijas
scan_in_drives(DRIVE_REMOVABLE);
Una vez tengas la letra de a unidad del tipo esperado, solo has de listar los archivos o si sabes que siempre será un nombre contreto solo has de intentar acceder a ese (en caso de error sigues buscando unidades, en caso de exito finalizas el bucle). No he usado ninguna comprovacion de error, deberian implementars todas las necesarias.
Para escanear cada 5 minutos puedes usar un temporizador, o puedes añadir tu aplicacion a un sheduler.
Saludos
vosk