Je suis en train d'écrire une application sur framboise pi avec la mémoire partagée. J'utilise la fonction strstr() dans ma bibliothèque de mémoire partagée auto-écrite. Quand je compile la bibliothèque sur OS X avec clang ++ je n'obtiens aucune erreur. Si je le compile sur mon pi de framboise j'ai l'erreur: 'strstr' n'a pas été déclaré dans cette portée.erreur: 'strstr' n'a pas été déclaré dans cette portée
J'ai essayé de mettre à jour ma framboise mais sans succès, pouvez-vous me donner n'importe quel conseil ou solution quoi faire.
tête-Datei
#ifndef SHAREDMEMORY_H
#define SHAREDMEMORY_H
#include <string>
#include <cstdlib>
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/mman.h>
#include <iostream>
#define MAX_SERVICES 99
/**
* Datei mit der Datenbank.
*/
#define FILEPATH "database.dat"
/**
* Anzahl der Zeichen in der
* Datenbank.
*/
#define CHARACTERS 2500
/**
* Größe der Datenbank.
*/
#define FILESIZE (CHARACTERS*sizeof(char))
class SharedMemory {
public:
/**
* Constructor
*/
SharedMemory();
/**
* Desctructor
*/
~SharedMemory();
/**
* Method to open file
* @param string: Path to file, has to exist
* @param int: for reading 0
* for writing 1
* @return bool: true on success
* false on error
*/
bool openFile(std::string, int);
/**
* Method to map file to memory
* @param string: Path to file, has to exist
* @param int: for reading 0
* for writing 1
* @return bool: true on success
* false on error
*/
bool mappingFile(int);
/**
* Method to remove file from memory
* @return bool: true on success
* false on error
*/
bool unmapFile();
/**
* Method to write information to file
* @param string: data to write
* e.g. string="#1:127.0.0.1:8000", #number range 0-99.
* @return bool: true on success
* false on error
*/
bool set(std::string);
/**
* Method to read information from file
* @param string: need to cointains id, if success
* then contains info from id.
* e.g. string="1", number range "0"-"99".
* @return bool: true on success
* false on error
*/
bool get(std::string&);
private:
/**
* Datei-Deskriptor.
*/
int fd;
/**
* Zeiger auf Dateiinhalt.
*/
char *mapPointer;
/**
* Path to file
*/
std::string filePath;
};
#endif /* SHAREDMEMORY_H */
Cpp-Datei
#include "SharedMemory.h"
SharedMemory::SharedMemory() { }
SharedMemory::~SharedMemory() { }
bool SharedMemory::openFile(std::string _path, int mode) {
if (mode) {
fd = open(_path.c_str(), O_RDWR, (mode_t)0600);
} else {
fd = open(_path.c_str(), O_RDONLY, (mode_t)0600);
}
if (fd == -1) {
return false;
}
return true;
}
bool SharedMemory::mappingFile(int mode){
void* tmpPointer;
if (mode) {
tmpPointer = mmap(0, FILESIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
} else {
tmpPointer = mmap(0, FILESIZE, PROT_READ, MAP_SHARED, fd, 0);
}
if(tmpPointer == MAP_FAILED) {
close(fd);
return false;
}
mapPointer = (char*) tmpPointer;
return true;
}
bool SharedMemory::unmapFile() {
int ret = munmap(mapPointer, FILESIZE);
close(fd);
if (ret == -1) {
return false;
}
return true;
}
bool SharedMemory::set(std::string s) {
/**
* Filter id, find the id in the file.
* If Values exist and id is valid, insert value
* -> if value not exists, insert "No_Service".
* if given id is invalid, return false
*/
int mid = s.find(";");
int begin = s.find("#");
std::string id = s.substr(begin + 1, mid - begin);
std::string info = s.substr(mid + 1, s.length());
if (info == "") {
info = "No_Service";
}
char* i = strstr(mapPointer, id.c_str());
while (*i++ != ';');
for (auto x: info) {
*i++ = x;
}
for (int j = 0; j < (20 - info.length()); ++j) {
*i++ = ' ';
}
return true;
}
bool SharedMemory::get(std::string& id){
/**
* Filter id, find the id in the file.
* save data in string s.
*/
int tmp;
try {
tmp = stoi(id);
} catch (...) {
id = "No_Service";
return false;
}
if (tmp > 100 || tmp < 1){
id = "No_Service";
return false;
}
id += ";";
char* i = strstr(mapPointer, id.c_str());
while (*i++ != ';');
id = "";
do {
id += *i++;
} while(*i != ' ' && *i != ';');
if (id == "No_Service"){
return false;
}
return true;
}
Vous devriez au moins merci de nous aider ou préventivement pour insérer un visage souriant pour mettre l'ambiance. Vous semblez grossier nous demander des choses avec un visage impassible. – gurghet
quand j'écris quelque chose comme bon tout le monde ou il est instantanément supprimé. Je suis nouveau à empiler débordement et je ne sais pas pourquoi cela arrive. J'ai essayé de l'éditer plusieurs fois. pouvez-vous me dire pourquoi il a ce comportement xD? et un administrateur a supprimé mon endphrase où je remerciais tout le monde pour y aider -.- – MrNice
Pas familier avec la tarte aux framboises, mais essayez «inclure»? –
IdeaHat