Je m’intéresse à ça pour mon stage plutôt. J'ai besoin d'un .c pour récupérer des données depuis un matériel mais sa bibliothèque n'est pas compatible avec g++ ...
Du coup je dois scinder mon travail ! Quelle chance, ça me retarde un peu mais j'en apprends également.
Je cherche a récupérer des données d'un fichier acquisition.c.
1-Pour cela j'envoie des arguments depuis le programme interface.cpp vers acquisition.c avec la commande execl. Ça m'évite de créer un tube nommé et de traiter la chaine de caractères, en plus cette méthode ne fonctionne pas très bien malheureusement.
2-Le programme acquisition.c fait l'acquisition des données et créé un tube nommé et écrit dessus.
3-Le fichier interface.cpp vient lire le tube nommé.
CODE :
Syntaxe de execl :
execl("chemin d'accès/prog","prog","arg1","arg2",...,NULL);
Programme :
#include "mainwindow.h"#include "ui_mainwindow.h"#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <iostream>#include <string>#include <fstream>#include <qwt_plot_curve.h>#include <QColorDialog>#include <fcntl.h>#include <stdio.h>#include <stdlib.h>#include <sys/stat.h>#include <sys/types.h>usingnamespacestd;//CONSTRUCTEURMainWindow::MainWindow(QWidget*parent):QMainWindow(parent),ui(newUi::MainWindow){ui->setupUi(this);}//DESTRUCTEURMainWindow::~MainWindow(){deleteui;}voidMainWindow::on_pushButton_clicked(){execl("/home/jo-pc/Acquisition","Acquisition",temps_integration,NULL);//lecture du tube :doubletmp2=0;cout<<"essai3"<<endl;intfd2;FILE*fp2;cout<<"essai4"<<endl;char*nomfich2="/home/jo-pc/Bureau/test2.txt",chaine2[50];cout<<"essai5"<<endl;fd2=open(nomfich2,O_RDONLY);/* ouverture du tube */cout<<"essai6"<<endl;fp2=fdopen(fd2,"r");/* ouverture du flot */cout<<"essai7"<<endl;fscanf(fp2,"%s",chaine2);/* lecture dans le flot */cout<<"essai8"<<endl;//tmp2 = strtod (chaine2,NULL);cout<<"essai9"<<endl;cout<<chaine2<<endl;cout<<"essai10"<<endl;//printf("%lf\n",tmp2); /* affichage */unlink(nomfich2);/* fermeture du flot */cout<<"essai11"<<endl;}
Quelques warnings :
mainwindow.cpp:86: avertissement : deprecated conversion from string constant to 'char*'[-Wwrite-strings]
char *nomfich2="/home/jo-pc/Bureau/test2.txt", chaine2[50];``` ^
Je compile avec g++ 64 bits sous QtCreator.
Voila voila
Pour le moment le programme se termine "subitement". Le programme s’arrête à l'affichage d'essai 7. Il ne passe pas cette ligne : fscanf(fp2, "%s", chaine2); /* lecture dans le flot */
[^] # Re: lire le cours sur execl et sur les tubes nommés
Posté par electro575 . En réponse au message Communication entre deux fichiers sous linux. Évalué à 0. Dernière modification le 13 avril 2015 à 10:02.
Je m’intéresse à ça pour mon stage plutôt. J'ai besoin d'un .c pour récupérer des données depuis un matériel mais sa bibliothèque n'est pas compatible avec g++ ...
Du coup je dois scinder mon travail ! Quelle chance, ça me retarde un peu mais j'en apprends également.
Je cherche a récupérer des données d'un fichier acquisition.c.
1-Pour cela j'envoie des arguments depuis le programme interface.cpp vers acquisition.c avec la commande execl. Ça m'évite de créer un tube nommé et de traiter la chaine de caractères, en plus cette méthode ne fonctionne pas très bien malheureusement.
2-Le programme acquisition.c fait l'acquisition des données et créé un tube nommé et écrit dessus.
3-Le fichier interface.cpp vient lire le tube nommé.
CODE :
Syntaxe de execl :
execl("chemin d'accès/prog","prog","arg1","arg2",...,NULL);
Programme :
Quelques warnings :