Òåìà: C++/Trim 5
Ïîêàçàòü ñîîáùåíèå îòäåëüíî
Ñòàðûé 26.03.2018, 14:58   #1
maxitronix
Member
 
Ðåãèñòðàöèÿ: Mar 2018
Ñîîáùåíèÿ: 34
Áëàãîäàðèë(à): 0 ðàç(à)
Ïîáëàãîäàðèëè: 0 ðàç(à) â 0 ñîîáùåíèÿõ
Ïî óìîë÷àíèþ C++/Trim 5

Äîáðîãî âðåìåíè ñóòîê! Ó ìåíÿ âîçíèêëà ïðîáëåìà ïðè êîìïèëÿöèè ïðîåêòà äëÿ ðàáîòû ñ ñîâìåùåííîé ïàìÿòüþ. Ñóòü â òîì ÷òî ÿ íàïèñàë ïðîãðàììó â Visual Studio, ïðîðàáîòàë àëãîðèòì, ïðîèçâîäèë îòëàäêó êîäà áåç èñïîëüçîâàíèÿ áèáëèîòåê shm.hpp. Âñå ðàáîòàëî áåç ïðîáëåì.

Êîãäà ðå÷ü çàøëà î ïåðåíîñå ïðîãðàììû íà Trim, ó ìåíÿ âîçíèêëè ïðîáëåìû...
Ñíà÷àëà ÿ ïûòàëñÿ ñäåëàòü ýòî áåç òóë÷åéíà(íàïðÿìóþ), íî áåç íåãî êàê âûÿñíèëîñü íàìíîãî ñëîæíåå ñêîìïèëèðîâàòü ñîáñòâåííóþ ïðîãðàììó ñ ó÷àñòèåì shared memory. Ðåøèë âîñïîëüçîâàòüñÿ ïðåäëîæåííûì îáðàçîì äëÿ âèðòóàëüíîé ìàøèíû ëèíóêñ.

Ó ìåíÿ âîçíèêëè ñëåäóþùèå ïðîáëåìû:
1. Ïîñëå êîïèïàñòà ðàáî÷åãî ïðèíöèïà èç Visual Studio â Netbeans, îí ïîä÷åðêèâàë æåëòîé âîëíîé òàêèå áèáëèîòåêè(#include) êàê string, fstream, iostream, cstring è.ò.ä, à ïðè êîïèëÿöèè âûäàë ìíå ñëåäóþùåå
Êîä:
rm -f main.o rlcutil.o rlinifile.o rlserial.o rlsharedmemory.o rlsocket.o rlthread.o rlwthread.o shm.o
rm -f *~ core *.core

Î×ÈÑÒÈÒÜ SUCCESSFUL (îáùåå âðåìÿ: 203ìñ)
arm-linux-gnueabihf-g++ -c -march=armv7-a -mtune=cortex-a8 -mfpu=neon -mfloat-abi=hard -g -O0 -Wall -W -fPIE  -I/opt/compiler_platform/compiled/mkspecs/linux-TIarmv7-sgx-g++ -I. -I. -o main.o main.cpp
main.cpp:30:1: error: reference to ‘string’ is ambiguous
 string GetTime(){
 ^
In file included from main.cpp:3:0:
shm.hpp:23:7: note: candidates are: class string
 class string {
       ^
In file included from /opt/compiler_platform/gcc-linaro-arm-linux-gnueabihf-4.8-2014.04_linux/arm-linux-gnueabihf/include/c++/4.8.3/iosfwd:39:0,
                 from /opt/compiler_platform/gcc-linaro-arm-linux-gnueabihf-4.8-2014.04_linux/arm-linux-gnueabihf/include/c++/4.8.3/ios:38,
                 from /opt/compiler_platform/gcc-linaro-arm-linux-gnueabihf-4.8-2014.04_linux/arm-linux-gnueabihf/include/c++/4.8.3/ostream:38,
                 from /opt/compiler_platform/gcc-linaro-arm-linux-gnueabihf-4.8-2014.04_linux/arm-linux-gnueabihf/include/c++/4.8.3/iostream:39,
                 from main.cpp:14:
/opt/compiler_platform/gcc-linaro-arm-linux-gnueabihf-4.8-2014.04_linux/arm-linux-gnueabihf/include/c++/4.8.3/bits/stringfwd.h:62:33: note:                 typedef class std::basic_string<char> std::string
   typedef basic_string<char>    string;   
                                 ^
main.cpp:30:1: error: ‘string’ does not name a type
 string GetTime(){
 ^
main.cpp:40:14: error: template argument 1 is invalid
 vector<string> GetValues(vector<string> &buffer, vector<string> &types) { // C÷èòûâàíèå è çàïèñü íóæíûõ sm-ïåðåìåííûõ èç òåêñò. ôàéëà â ìàòðèöó
              ^
main.cpp:40:14: error: template argument 2 is invalid
main.cpp:40:39: error: template argument 1 is invalid
 vector<string> GetValues(vector<string> &buffer, vector<string> &types) { // C÷èòûâàíèå è çàïèñü íóæíûõ sm-ïåðåìåííûõ èç òåêñò. ôàéëà â ìàòðèöó
                                       ^
main.cpp:40:39: error: template argument 2 is invalid
main.cpp:40:63: error: template argument 1 is invalid
 vector<string> GetValues(vector<string> &buffer, vector<string> &types) { // C÷èòûâàíèå è çàïèñü íóæíûõ sm-ïåðåìåííûõ èç òåêñò. ôàéëà â ìàòðèöó
                                                               ^
main.cpp:40:63: error: template argument 2 is invalid
main.cpp: In function ‘int GetValues(int&, int&)’:
main.cpp:47:2: error: reference to ‘string’ is ambiguous
  string buf;
  ^
In file included from main.cpp:3:0:
shm.hpp:23:7: note: candidates are: class string
 class string {
       ^
In file included from /opt/compiler_platform/gcc-linaro-arm-linux-gnueabihf-4.8-2014.04_linux/arm-linux-gnueabihf/include/c++/4.8.3/iosfwd:39:0,
                 from /opt/compiler_platform/gcc-linaro-arm-linux-gnueabihf-4.8-2014.04_linux/arm-linux-gnueabihf/include/c++/4.8.3/ios:38,
                 from /opt/compiler_platform/gcc-linaro-arm-linux-gnueabihf-4.8-2014.04_linux/arm-linux-gnueabihf/include/c++/4.8.3/ostream:38,
                 from /opt/compiler_platform/gcc-linaro-arm-linux-gnueabihf-4.8-2014.04_linux/arm-linux-gnueabihf/include/c++/4.8.3/iostream:39,
                 from main.cpp:14:
/opt/compiler_platform/gcc-linaro-arm-linux-gnueabihf-4.8-2014.04_linux/arm-linux-gnueabihf/include/c++/4.8.3/bits/stringfwd.h:62:33: note:                 typedef class std::basic_string<char> std::string
   typedef basic_string<char>    string;   
                                 ^
main.cpp:47:9: error: expected ‘;’ before ‘buf’
  string buf;
         ^
main.cpp:52:10: error: ‘buf’ was not declared in this scope
   rec >> buf;
          ^
main.cpp:55:9: error: request for member ‘resize’ in ‘buffer’, which is of non-class type ‘int’
  buffer.resize(num);
         ^
main.cpp:56:8: error: request for member ‘resize’ in ‘types’, which is of non-class type ‘int’
  types.resize(num);
        ^
main.cpp:61:23: error: invalid types ‘int[int]’ for array subscript
   getline(rec, types[i], '.');
                       ^
main.cpp:62:24: error: invalid types ‘int[int]’ for array subscript
   getline(rec, buffer[i]);
                        ^
main.cpp:63:19: error: invalid types ‘int[int]’ for array subscript
   cout << buffer[i] << "  " << types[i] << endl; //äëÿ îòëàäêè(óäàëèòü)
                   ^
main.cpp:63:39: error: invalid types ‘int[int]’ for array subscript
   cout << buffer[i] << "  " << types[i] << endl; //äëÿ îòëàäêè(óäàëèòü)
                                       ^
main.cpp:67:19: error: ‘WriteFirst’ was not declared in this scope
  WriteFirst(buffer);
                   ^
main.cpp:69:17: warning: left operand of comma operator has no effect [-Wunused-value]
  return buffer, types; //
                 ^
main.cpp:48:7: warning: unused variable ‘buff’ [-Wunused-variable]
  char buff[20];//ïåðåñ÷åò
       ^
main.cpp: At global scope:
main.cpp:72:1: error: reference to ‘string’ is ambiguous
 string GetFilename() { //Îïðåäåëåíèå èìåíè äëÿ ôàéëà ñ ó÷åòîì òåêóùåé äàòû
 ^
In file included from main.cpp:3:0:
shm.hpp:23:7: note: candidates are: class string
 class string {
       ^
In file included from /opt/compiler_platform/gcc-linaro-arm-linux-gnueabihf-4.8-2014.04_linux/arm-linux-gnueabihf/include/c++/4.8.3/iosfwd:39:0,
                 from /opt/compiler_platform/gcc-linaro-arm-linux-gnueabihf-4.8-2014.04_linux/arm-linux-gnueabihf/include/c++/4.8.3/ios:38,
                 from /opt/compiler_platform/gcc-linaro-arm-linux-gnueabihf-4.8-2014.04_linux/arm-linux-gnueabihf/include/c++/4.8.3/ostream:38,
                 from /opt/compiler_platform/gcc-linaro-arm-linux-gnueabihf-4.8-2014.04_linux/arm-linux-gnueabihf/include/c++/4.8.3/iostream:39,
                 from main.cpp:14:
/opt/compiler_platform/gcc-linaro-arm-linux-gnueabihf-4.8-2014.04_linux/arm-linux-gnueabihf/include/c++/4.8.3/bits/stringfwd.h:62:33: note:                 typedef class std::basic_string<char> std::string
   typedef basic_string<char>    string;   
                                 ^
main.cpp:72:1: error: ‘string’ does not name a type
 string GetFilename() { //Îïðåäåëåíèå èìåíè äëÿ ôàéëà ñ ó÷åòîì òåêóùåé äàòû
 ^
main.cpp:84:30: error: template argument 1 is invalid
 void WriteFirst(vector<string> &buffer) {
                              ^
main.cpp:84:30: error: template argument 2 is invalid
main.cpp: In function ‘void WriteFirst(int&)’:
main.cpp:86:27: error: ‘GetFilename’ was not declared in this scope
  ofstream out(GetFilename(), ios::app);
                           ^
main.cpp:88:22: error: request for member ‘size’ in ‘buffer’, which is of non-class type ‘int’
  while (num < buffer.size()) {
                      ^
main.cpp:89:20: error: request for member ‘size’ in ‘buffer’, which is of non-class type ‘int’
   if (num < buffer.size() - 1) {
                    ^
main.cpp:90:21: error: invalid types ‘int[int]’ for array subscript
    out << buffer[num] << ";" << setw(15);
                     ^
main.cpp:94:21: error: invalid types ‘int[int]’ for array subscript
    out << buffer[num] << endl;
                     ^
main.cpp: At global scope:
main.cpp:101:28: error: template argument 1 is invalid
  void InitFBD(vector<string> &buffer, vector<string> &types) {
                            ^
main.cpp:101:28: error: template argument 2 is invalid
main.cpp:101:52: error: template argument 1 is invalid
  void InitFBD(vector<string> &buffer, vector<string> &types) {
                                                    ^
main.cpp:101:52: error: template argument 2 is invalid
main.cpp: In function ‘void InitFBD(int&, int&)’:
main.cpp:104:30: error: request for member ‘size’ in ‘buffer’, which is of non-class type ‘int’
   for (num = 0; num < buffer.size(); num++) {
                              ^
main.cpp:105:17: error: invalid types ‘int[int]’ for array subscript
    if (types[num] == "bool" && mymem.getType(buffer[num].c_str()) == BOOL)
                 ^
main.cpp:105:32: error: ‘mymem’ was not declared in this scope
    if (types[num] == "bool" && mymem.getType(buffer[num].c_str()) == BOOL)
                                ^
main.cpp:105:56: error: invalid types ‘int[int]’ for array subscript
    if (types[num] == "bool" && mymem.getType(buffer[num].c_str()) == BOOL)
                                                        ^
main.cpp:107:22: error: invalid types ‘int[int]’ for array subscript
    else if (types[num] == "float" && mymem.getType(buffer[num].c_str()) == FLOAT)
                      ^
main.cpp:107:62: error: invalid types ‘int[int]’ for array subscript
    else if (types[num] == "float" && mymem.getType(buffer[num].c_str()) == FLOAT)
                                                              ^
main.cpp:109:22: error: invalid types ‘int[int]’ for array subscript
    else if (types[num] == "short" && mymem.getType(buffer[num].c_str()) == SHORT)
                      ^
main.cpp:109:62: error: invalid types ‘int[int]’ for array subscript
    else if (types[num] == "short" && mymem.getType(buffer[num].c_str()) == SHORT)
                                                              ^
main.cpp:111:22: error: invalid types ‘int[int]’ for array subscript
    else if (types[num] == "long" && mymem.getType(buffer[num].c_str()) == LONG)
                      ^
main.cpp:111:61: error: invalid types ‘int[int]’ for array subscript
    else if (types[num] == "long" && mymem.getType(buffer[num].c_str()) == LONG)
                                                             ^
main.cpp:115:7: error: ‘mymem’ was not declared in this scope
   if (mymem.getType("Eject") != BOOL)
       ^
main.cpp:117:7: error: ‘mymem’ was not declared in this scope
   if (mymem.getType("FreeDiskSpace") != FLOAT)
       ^
main.cpp:103:8: warning: unused variable ‘init’ [-Wunused-variable]
   bool init = false;
        ^
main.cpp: At global scope:
main.cpp:121:31: error: template argument 1 is invalid
  bool CompareFBD(vector<string> &buffer, vector<string> &types, vector<string> &values) { //Ïîñòîÿííàÿ ïðîâåðêà è ýêñòðèìàëüíàÿ çàïèñü ïî èçì.
                               ^
main.cpp:121:31: error: template argument 2 is invalid
main.cpp:121:55: error: template argument 1 is invalid
  bool CompareFBD(vector<string> &buffer, vector<string> &types, vector<string> &values) { //Ïîñòîÿííàÿ ïðîâåðêà è ýêñòðèìàëüíàÿ çàïèñü ïî èçì.
                                                       ^
main.cpp:121:55: error: template argument 2 is invalid
main.cpp:121:78: error: template argument 1 is invalid
  bool CompareFBD(vector<string> &buffer, vector<string> &types, vector<string> &values) { //Ïîñòîÿííàÿ ïðîâåðêà è ýêñòðèìàëüíàÿ çàïèñü ïî èçì.
                                                                              ^
main.cpp:121:78: error: template argument 2 is invalid
main.cpp: In function ‘bool CompareFBD(int&, int&, int&)’:
main.cpp:123:10: error: request for member ‘resize’ in ‘values’, which is of non-class type ‘int’
   values.resize(buffer.size());
          ^
main.cpp:123:24: error: request for member ‘size’ in ‘buffer’, which is of non-class type ‘int’
   values.resize(buffer.size());
                        ^
main.cpp:126:31: error: request for member ‘size’ in ‘values’, which is of non-class type ‘int’
    for (num = 0; num < values.size(); num++)
                               ^
main.cpp:127:18: error: invalid types ‘int[int]’ for array subscript
     if (types[num] == "bool" && mymem.GetBool(buffer[num].c_str()) != values[num])
                  ^
main.cpp:127:33: error: ‘mymem’ was not declared in this scope
     if (types[num] == "bool" && mymem.GetBool(buffer[num].c_str()) != values[num])
                                 ^
main.cpp:127:57: error: invalid types ‘int[int]’ for array subscript
     if (types[num] == "bool" && mymem.GetBool(buffer[num].c_str()) != values[num])
                                                         ^
main.cpp:127:81: error: invalid types ‘int[int]’ for array subscript
     if (types[num] == "bool" && mymem.GetBool(buffer[num].c_str()) != values[num])
                                                                                 ^
main.cpp: At global scope:
main.cpp:133:15: error: template argument 1 is invalid
  vector<string> GetFBD(vector<string> &buffer, vector<string> &types, vector<string> &values) {
               ^
main.cpp:133:15: error: template argument 2 is invalid
main.cpp:133:37: error: template argument 1 is invalid
  vector<string> GetFBD(vector<string> &buffer, vector<string> &types, vector<string> &values) {
                                     ^
main.cpp:133:37: error: template argument 2 is invalid
main.cpp:133:61: error: template argument 1 is invalid
  vector<string> GetFBD(vector<string> &buffer, vector<string> &types, vector<string> &values) {
                                                             ^
main.cpp:133:61: error: template argument 2 is invalid
main.cpp:133:84: error: template argument 1 is invalid
  vector<string> GetFBD(vector<string> &buffer, vector<string> &types, vector<string> &values) {
                                                                                    ^
main.cpp:133:84: error: template argument 2 is invalid
main.cpp: In function ‘int GetFBD(int&, int&, int&)’:
main.cpp:135:30: error: request for member ‘size’ in ‘values’, which is of non-class type ‘int’
   for (num = 0; num < values.size(); num++)
                              ^
main.cpp:136:17: error: invalid types ‘int[int]’ for array subscript
    if (types[num] == "bool") {
                 ^
main.cpp:137:15: error: invalid types ‘int[int]’ for array subscript
     values[num] = to_string(mymem.GetBool((buffer[num].c_str())));
               ^
main.cpp:137:29: error: ‘mymem’ was not declared in this scope
     values[num] = to_string(mymem.GetBool((buffer[num].c_str())));
                             ^
main.cpp:137:54: error: invalid types ‘int[int]’ for array subscript
     values[num] = to_string(mymem.GetBool((buffer[num].c_str())));
                                                      ^
main.cpp:137:65: error: ‘to_string’ was not declared in this scope
     values[num] = to_string(mymem.GetBool((buffer[num].c_str())));
                                                                 ^
main.cpp:140:22: error: invalid types ‘int[int]’ for array subscript
    else if (types[num] == "float") {
                      ^
main.cpp:141:15: error: invalid types ‘int[int]’ for array subscript
     values[num] = to_string(mymem.GetFloat((buffer[num].c_str())));
               ^
main.cpp:141:29: error: ‘mymem’ was not declared in this scope
     values[num] = to_string(mymem.GetFloat((buffer[num].c_str())));
                             ^
main.cpp:141:55: error: invalid types ‘int[int]’ for array subscript
     values[num] = to_string(mymem.GetFloat((buffer[num].c_str())));
                                                       ^
main.cpp:141:66: error: ‘to_string’ was not declared in this scope
     values[num] = to_string(mymem.GetFloat((buffer[num].c_str())));
                                                                  ^
main.cpp:144:22: error: invalid types ‘int[int]’ for array subscript
    else if (types[num] == "int") {
                      ^
main.cpp:145:15: error: invalid types ‘int[int]’ for array subscript
     values[num] = to_string(mymem.GetShort((buffer[num].c_str())));
               ^
main.cpp:145:29: error: ‘mymem’ was not declared in this scope
     values[num] = to_string(mymem.GetShort((buffer[num].c_str())));
                             ^
main.cpp:145:55: error: invalid types ‘int[int]’ for array subscript
     values[num] = to_string(mymem.GetShort((buffer[num].c_str())));
                                                       ^
main.cpp:145:66: error: ‘to_string’ was not declared in this scope
     values[num] = to_string(mymem.GetShort((buffer[num].c_str())));
                                                                  ^
main.cpp:148:22: error: invalid types ‘int[int]’ for array subscript
    else if (types[num] == "long")
                      ^
main.cpp:149:15: error: invalid types ‘int[int]’ for array subscript
     values[num] = to_string(mymem.GetLong((buffer[num].c_str())));
               ^
main.cpp:149:29: error: ‘mymem’ was not declared in this scope
     values[num] = to_string(mymem.GetLong((buffer[num].c_str())));
                             ^
main.cpp:149:54: error: invalid types ‘int[int]’ for array subscript
     values[num] = to_string(mymem.GetLong((buffer[num].c_str())));
                                                      ^
main.cpp:149:65: error: ‘to_string’ was not declared in this scope
     values[num] = to_string(mymem.GetLong((buffer[num].c_str())));
                                                                 ^
main.cpp: At global scope:
main.cpp:153:30: error: template argument 1 is invalid
  void WriteVals(vector<string> &values) { //Çàïèñü ñàìîãî ëîãà â òåêñòîâûé ôàéë.
                              ^
main.cpp:153:30: error: template argument 2 is invalid
main.cpp: In function ‘void WriteVals(int&)’:
main.cpp:160:3: error: reference to ‘string’ is ambiguous
   string buf;
   ^
In file included from main.cpp:3:0:
shm.hpp:23:7: note: candidates are: class string
 class string {
       ^
In file included from /opt/compiler_platform/gcc-linaro-arm-linux-gnueabihf-4.8-2014.04_linux/arm-linux-gnueabihf/include/c++/4.8.3/iosfwd:39:0,
                 from /opt/compiler_platform/gcc-linaro-arm-linux-gnueabihf-4.8-2014.04_linux/arm-linux-gnueabihf/include/c++/4.8.3/ios:38,
                 from /opt/compiler_platform/gcc-linaro-arm-linux-gnueabihf-4.8-2014.04_linux/arm-linux-gnueabihf/include/c++/4.8.3/ostream:38,
                 from /opt/compiler_platform/gcc-linaro-arm-linux-gnueabihf-4.8-2014.04_linux/arm-linux-gnueabihf/include/c++/4.8.3/iostream:39,
                 from main.cpp:14:
/opt/compiler_platform/gcc-linaro-arm-linux-gnueabihf-4.8-2014.04_linux/arm-linux-gnueabihf/include/c++/4.8.3/bits/stringfwd.h:62:33: note:                 typedef class std::basic_string<char> std::string
   typedef basic_string<char>    string;   
                                 ^
main.cpp:160:10: error: expected ‘;’ before ‘buf’
   string buf;
          ^
main.cpp:161:28: error: ‘GetFilename’ was not declared in this scope
   ofstream out(GetFilename(), ios::app);
                            ^
main.cpp:162:18: error: ‘GetTime’ was not declared in this scope
   out << GetTime() << ";" << setw(15);
                  ^
main.cpp:163:23: error: request for member ‘size’ in ‘values’, which is of non-class type ‘int’
   while (num < values.size()) {
                       ^
main.cpp:165:21: error: request for member ‘size’ in ‘values’, which is of non-class type ‘int’
    if (num < values.size() - 1) {
                     ^
main.cpp:166:22: error: invalid types ‘int[int]’ for array subscript
     out << values[num] << ";" << setw(15);
                      ^
main.cpp:170:22: error: invalid types ‘int[int]’ for array subscript
     out << values[num] << endl << setw(15);
                      ^
main.cpp: In function ‘int main()’:
main.cpp:180:16: error: template argument 1 is invalid
   vector<string> buffer;
                ^
main.cpp:180:16: error: template argument 2 is invalid
main.cpp:180:24: error: invalid type in declaration before ‘;’ token
   vector<string> buffer;
                        ^
main.cpp:181:16: error: template argument 1 is invalid
   vector<string> types;
                ^
main.cpp:181:16: error: template argument 2 is invalid
main.cpp:181:23: error: invalid type in declaration before ‘;’ token
   vector<string> types;
                       ^
main.cpp:182:16: error: template argument 1 is invalid
   vector<string> values;
                ^
main.cpp:182:16: error: template argument 2 is invalid
main.cpp:182:24: error: invalid type in declaration before ‘;’ token
   vector<string> values;
                        ^
make: *** [main.o] Îøèáêà 1

ÏÎÑÒÐÎÈÒÜ FAILED (çíà÷åíèå âûõîäà 2, îáùåå âðåìÿ: 1s)
Òàê æå Netbean ðóãàåòñÿ íà ìåòîäû ýòèõ áèáëèîòåê.



Âîò ñàì êîä (áåç âêëþ÷åíèé rlcutil, rlinifile, rlserial, rlsharedmemory è.ò.ä):
Êîä:
#define _CRT_SECURE_NO_WARNINGS

#include "shm.hpp"
#include <string>


#include <cstring>
#include <cstdlib>
#include <ctime>
#include <iostream>
#include <fstream>
#include <vector>
#include <iomanip>

#include <sys/vfs.h>
#include <sys/mount.h>

#define   MY_FLASH_FILENAME   "/media/u1/"
#define   FLASH_MOUNT_DIR     "/media/u1"
#define   TYPE_VFAT           0x4d44

using namespace std;

struct tm *mytime; // âðåìåííàÿ ñòðóêòóðà

string GetTime() {
	char timebuf[10];
	time_t now;
	time(&now);
	mytime = localtime(&now);
	strftime(timebuf, 10, "%H:%M", mytime);
	string logtime = string(timebuf);
	return logtime;
}

vector<string> GetValues(vector<string> &buffer, vector<string> &types) { // C÷èòûâàíèå è çàïèñü íóæíûõ sm-ïåðåìåííûõ èç òåêñò. ôàéëà â ìàòðèöó

	struct statfs flash_fs;
	statfs(FLASH_MOUNT_DIR, &flash_fs);
	if (flash_fs.f_type != TYPE_VFAT)
		exit(1);

	string buf;
	char buff[20];//ïåðåñ÷åò
	int num = 0;
	ifstream rec("/media/u1/vals.txt");
	while (!rec.eof()) {
		rec >> buf;
		num++;
	}
	buffer.resize(num);
	types.resize(num);
	rec.seekg(0, ios::beg); //âîçâðàò ïîòîêà â íà÷àëî ôàéëà
	rec.clear();

	for (int i = 0; i < num; i++) {
		getline(rec, types[i], '.');
		getline(rec, buffer[i]);
		cout << buffer[i] << "  " << types[i] << endl; //äëÿ îòëàäêè(óäàëèòü)
	}
	rec.close();

	WriteFirst(buffer);

	return buffer, types; //
}

string GetFilename() { //Îïðåäåëåíèå èìåíè äëÿ ôàéëà ñ ó÷åòîì òåêóùåé äàòû
	time_t date;
	time(&date);
	mytime = localtime(&date);
	char buffer[20];
	string data;
	string ext = " log.txt";
	strftime(buffer, 20, "%d.%m.%Y", mytime); // dd.mm.yy
	data = MY_FLASH_FILENAME + string(buffer) + ext;              // dd.mm.yy + log.txt
	return data;
}

void WriteFirst(vector<string> &buffer) {
	int num = 0;
	ofstream out(GetFilename(), ios::app);
	out << "Âðåìÿ;" << setw(15);
	while (num < buffer.size()) {
		if (num < buffer.size() - 1) {
			out << buffer[num] << ";" << setw(15);
			num++;
		}
		else {
			out << buffer[num] << endl;
			num++;
		}
	}
	out.close();
}

	void InitFBD(vector<string> &buffer, vector<string> &types) {
		int num;
		bool init = false;
		for (num = 0; num < buffer.size(); num++) {
			if (types[num] == "bool" && mymem.getType(buffer[num].c_str()) == BOOL)
				continue;
			else if (types[num] == "float" && mymem.getType(buffer[num].c_str()) == FLOAT)
				continue;
			else if (types[num] == "short" && mymem.getType(buffer[num].c_str()) == SHORT)
				continue;
			else if (types[num] == "long" && mymem.getType(buffer[num].c_str()) == LONG)
				continue;
			else exit(1);
		}
		if (mymem.getType("Eject") != BOOL)
			exit(1);
		if (mymem.getType("FreeDiskSpace") != FLOAT)
			exit(1);
	}

	bool CompareFBD(vector<string> &buffer, vector<string> &types, vector<string> &values) { //Ïîñòîÿííàÿ ïðîâåðêà è ýêñòðèìàëüíàÿ çàïèñü ïî èçì.
		int num;
		values.resize(buffer.size());
		bool change = false;
		while (!change) {
			for (num = 0; num < values.size(); num++)
				if (types[num] == "bool" && mymem.GetBool(buffer[num].c_str()) != values[num])
					return true;
		}
		return change;
	}

	vector<string> GetFBD(vector<string> &buffer, vector<string> &types, vector<string> &values) {
		int num;
		for (num = 0; num < values.size(); num++)
			if (types[num] == "bool") {
				values[num] = to_string(mymem.GetBool((buffer[num].c_str())));
				continue;
			}
			else if (types[num] == "float") {
				values[num] = to_string(mymem.GetFloat((buffer[num].c_str())));
				continue;
			}
			else if (types[num] == "int") {
				values[num] = to_string(mymem.GetShort((buffer[num].c_str())));
				continue;
			}
			else if (types[num] == "long")
				values[num] = to_string(mymem.GetLong((buffer[num].c_str())));
		return values;
	}

	void WriteVals(vector<string> &values) { //Çàïèñü ñàìîãî ëîãà â òåêñòîâûé ôàéë.
		struct statfs flash_fs;
		statfs(FLASH_MOUNT_DIR, &flash_fs);
		if (flash_fs.f_type != TYPE_VFAT)
			return;

		int num = 0;
		string buf;
		ofstream out(GetFilename(), ios::app);
		out << GetTime() << ";" << setw(15);
		while (num < values.size()) {

			if (num < values.size() - 1) {
				out << values[num] << ";" << setw(15);
				num++;
			}
			else {
				out << values[num] << endl << setw(15);
				num++;
			}

		}
		out.close();
	}


	int main() {
		vector<string> buffer;
		vector<string> types;
		vector<string> values;

		Shm mymem("./load_files.srv");

		GetValues(buffer, types);
		InitFBD(buffer, types);
		GetFBD(buffer, types, values);

		struct timespec tv;
		tv.tv_sec = 0;
		tv.tv_nsec = 1000000;

		while (1) {
			time_t timeto;
			timeto = time(NULL) + 600;
			do {
				nanosleep(&tv, NULL);

				if (CompareFBD(buffer, types, values))
					break;

			} while (timeto > time(NULL));

			//  Ôóíêöèÿ ñîõðàíåíèÿ çíà÷åíèÿ â ôàéë
			GetFBD(buffer, types, values);
			WriteVals(values);


			struct statfs flash_fs;
			statfs(FLASH_MOUNT_DIR, &flash_fs);
			if (flash_fs.f_type == TYPE_VFAT) {
				float FreeDiskSpace = (float)flash_fs.f_bfree / (float)flash_fs.f_blocks * 100.0;
				mymem.setFloat("FreeDiskSpace", FreeDiskSpace);
			}
			else
				mymem.setFloat("FreeDiskSpace", 0.0);
			if (mymem.getBool("Eject")) {
				umount(FLASH_MOUNT_DIR);
			}
		}
	}


×òî ìîæíî ñäåëàòü?

Ïîñëåäíèé ðàç ðåäàêòèðîâàëîñü maxitronix, 26.03.2018 â 15:10
maxitronix âíå ôîðóìà   Îòâåòèòü ñ öèòèðîâàíèåì