2015-09-13 1 views
1

J'ai été déconner avec hidraw.h pour voir ce que je pouvais faire avec mon USB, mais lorsque je tente d'ouvrir /dev/hidraw0 il dit Unable to open device: Permission denied, je sais que je pouvais faire quelque chose comme system("sudo open /dev/hidraw0"); Mais bien sûr, cela n'aurait pas le même effet. Aussi je suis dans Kali Linux. Voici mon code:fonction Open in C dit incapable d'ouvrir l'appareil: autorisation refusée

/* Linux */ 
#include <linux/types.h> 
#include <linux/input.h> 
#include <linux/hidraw.h> 

/* Unix */ 
#include <sys/ioctl.h> 
#include <sys/types.h> 
#include <sys/stat.h> 
#include <fcntl.h> 
#include <unistd.h> 

/* C */ 
#include <stdio.h> 
#include <string.h> 
#include <stdlib.h> 
#include <errno.h> 
#include <iostream> 
using namespace std; 

int main() 
{ 
    int fd; 
    int i, res, desc_size = 0; 
    char buf[256]; 
    struct hidraw_report_descriptor rpt_desc; 
    struct hidraw_devinfo info; 

    fd = open("/dev/hidraw0", O_RDWR); 

    if(fd < 0) 
    { 
     perror("Unable to open device"); 
     return 1; 
    } 
    else 
    { 
     cout << "Something happend!" << endl; 
     return 0; 
    } 

} 
+4

Tout d'abord, vous devriez essayer d'exécuter votre programme avec 'sudo'. – ForceBru

Répondre

1

Votre programme n'a pas l'autorisation d'ouvrir /dev/hidraw0. Donc, vous devez l'exécuter de telle sorte qu'il a la permission. La manière la plus simple de le faire, comme le suggère le commentaire de ForceBru, est d'exécuter le programme sous sudo. (Vous ne pouvez pas exécuter simplement la fonction open sous sudo;. open est une fonction, pas un programme)

Vous pourriez également être en mesure de rendre le programme exécuté avec les privilèges root en mettant son drapeau setuid, en utilisant chmod u+s ou chmod u+gs . Considérons que le périphérique possède les autorisations dont il dispose pour de bonnes raisons. Faites attention.

+0

Vous pouvez utiliser 'setcap' pour donner plus d'autorisations que l'accès root complet. – o11c

+0

Je devais aller dans le répertoire où il était et taper 'sudo./CPP' et ça a marché! Et même mieux mon ordinateur ne s'est pas écrasé! :) –

0

Si possible, alors essayez d'abord de donner un peu plus la permission de ce dispositif

sudo chmod 777 /dev/hidraw0 

vous exécutez programme. si nécessaire, essayez également de modifier son propriétaire par la commande Chown.

+0

Modifier les autorisations sur l'appareil est presque certainement une mauvaise idée. Je ne sais pas ce que '/ dev/hidraw0' est, mais probablement il a les permissions qu'il a pour une raison. Donner à chaque utilisateur du système l'autorisation de lire, d'écrire et d'exécuter (!) Est dangereux. Donnez au * programme * l'autorisation d'accéder à l'appareil. –

+0

Gardez à l'esprit que je viens de télécharger Kali hier sur un USB et que j'ai très peu d'expérience avec sa ligne de commande et son interface. Alors, comment pourrais-je donner à mon programme la permission d'y accéder? Et si cela ne vous dérange pas, comment pourrais-je identifier ce que '/ dev/hidraw0' est? –

+0

Vous devriez utiliser udev pour définir les permissions, mais vous devriez probablement le faire en groupe plutôt que de laisser le monde le faire. – o11c