Comment je pourrais créer un flux qui n'utiliserais pas les I/O standard. Comme par exemple, si je veux créer un flux qui serais diriger sur une carte PCI, comment je ferais?
Comment je pourrais créer un flux qui n'utiliserais pas les I/O standard. Comme par exemple, si je veux créer un flux qui serais diriger sur une carte PCI, comment je ferais?
??
En regardant la doc des matériels sur lesquels tu travailles ?
Rien de tel n'est normalisé dans le C++98.
Et puis, la notion de flux est super vague hors du contexte IOStream.
Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...
Si tu es sous Linux ou Unix tu peux utiliser les fichiers spéciaux.
Si tu es sous Win ben la je ne sais pas.
Si tu veux pouvoir écrire comme dans un flux, mais ailleurs que dans un fichier, une chaîne en mémoire ou une console, les flux standards sont fait pour ça. L'idée est de dériver non pas tant des *stream, mais plutôt du *streambuf.
Tu peux voir un exemple sommaire sur http://www.cmla.ens-cachan.fr/Utilisateurs/dosreis/C++/FAQ/#flux_entree_sortie
(paragraphe 27.3)
Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.
Je me demandais, pour mon problème ou je veux lire sur une carte PCI à l'aide d'un flux, est-ce que c'est bon de faire un freopen(ma_device,"r",stdin). J'ai essayer de le faire sur un fichier sur disque sa marche(cin >> ligne), mais pour un autre périphérique est-ce bon? Avez-vous un exemple par exemple sur un fax ou un scanner par exemple.
Sujets fusionnés, merci de rester dans le même fil pour le même problème.
![]()
Mieux que SDL : découvrez SFML
Mes tutoriels 2D/3D/Jeux/C++, Cours et tutoriels C++, FAQ C++, Forum C++.
si tu travail avec un unix alors tu prend simplement un fstream et t'ouvre le fichier /dev/<le perif que tu veux>
Sous windows, comment je pourrais faire alors si sur Unix j'aurais simplement a faire un fstream sur /dev/<mon périphérique>, donc si je donne un exemple de code sous Unix ce serais comme ça:
Avec Windows alors comment je pourrais faire pour trouver le périphérique. Puis il serais t-il possible que je pourrais pas lire pour n'importe quelle raison?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 fstream file("/dev/IRQ=21", ios_base::in); char data[255]; while (file>>data) { // traitement des informations } file.close();
J'ai une question aussi par rapport a la lecture. En Java pour savoir s'il y avait des informations à lire dans le flux j'utilisais des méthodes comme available() comme ceci:
Est-il possible de faire la même chose?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 BufferedInputStream in = new BufferedInputStream(aSocket.getInputStream()); while (in.available()<=0); String chaine = in.readLine();
t'es pas très familier avec les unix toifstream file("/dev/IRQ=21", ios_base::in);fin bon là n'est pas la question... sous windows je n'ai pas le moindre idée de comment on fait.
Pour savoir si il y a encore à lire, le mieux c'est de lire et voir si ça n'a pas fait une erreur... du style:
l'oppérateur >> retournera un false si la lecture a été faite alors qu'il n'y a plus rien à lire. Sinon t'as aussi le eof(): http://www.cplusplus.com/ref/iostream/ios/eof.html
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 istringstream iss("ceci est un text"); string text; while (iss >> text) cout << text << endl;
Non. eof() est un faux ami. Tant que l'on ne se sera pas cogné dans le mur, eof ne nous dira pas qu'on y est arrivé. Je me sers essentiellement après une tentative d'extraction de nombre (et encore, il y a d'autres façons) et jamais pour boucler sur un flux.Envoyé par zdra
Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...
je ne l'avais encore jamais utilisé mais son nom avait l'air bien sympatique
![]()
Bonjour a tous,
Hey bien oui j'ai réussi a ouvrir et fermer un Handle sur driver PCI de ce cette manière:
Mais là j'ai un autre problème, si je veux lire sur le driver, comment je dois faire, j'ai lu pas mal et j'ai plusieurs source. Sur un site il me dise d'utiliser la fonction DeviceIoControl, sur d'autre c'est marquer d'utiliser ReadFile, comme je dois faire. Merci d'avance
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 HANDLE hdevice = CreateFile("\\\\.\\dig704",GENERIC_READ,0,NULL,OPEN_EXISTING,FILE_FLAG_OVERLAPPED,NULL); ... CloseHandle(hdevice);
ReadFile c'est plus simple, ça revient à utiliser DeviceIOControl avec les paramètres adaptés à la lecture. Mais le comportement dépend uniquement du bon vouloir du driver.
Si ça marche, à priori, ça devrait marcher avec un ifstream (le même code que tu as donné plus haut, mais avec le bon nom de driver).
Hum...![]()
![]()
![]()
Il n'y a rien qui marche sur le mossus de périphérique PCI:
Sa marche pas... pire encore sa me cré un fichier du nom de mon pilote quand je donne juste "dig704".
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 ifstream f("\\.\dig704"); while (true) cout << in.rdbuf();
Pis ça non plus sa marche pas.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 HANDLE hdevice = CreateFile("\\.\dig704",GENERIC_READ,FILE_SHARE_READ | FILE_SHARE_WRITE,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_TEMPORARY,NULL); if (hdevice!=INVALID_HANDLE_VALUE) { while(true) { char dataIn[128]; DWORD byteRead = 0; int index=0; if (ReadFile(hdevice,dataIn,sizeof(dataIn),&byteRead,NULL)!=0) cout << "Data: " << dataIn << endl; ::Sleep(500); } CloseHandle(hdevice); }
J'ai essayer de contacter le fabricant du driver et de mes censeurs pour leurs demanders les IOCTL(pour ma dernière solution qu'est DeviceIOContro) du driver, voir si ça va marcher. Espérant qu'ils vont me les envoyers. D'ici là y aurait tu kekun qui aurait des idées.
Avec les API windows, tu as la fonction GetLastError qui te permet de savoir ce qui a cloché lors de l'appel à la fonction CreateFile. Déjà vérifies quel code d'erreur te renvoie cette fonction. C'est peut-être tout simplement l'utilisation de paramètres erronés ou alors une question de "droits d'ouverture et d'écriture" ou autres choses encore.Envoyé par Philippe299
Open Source Microsoft MediaFoundation
https://github.com/mofo7777
http://jeux.developpez.com/faq/directx/?page=dshow
Partager