Dieser Artikel bezieht sich auf dieses Video:
Hier die Quelltexte zu den beiden Programmen read und cc++, die Includes werden natürlich nicht alle benötigt, aber ich hatte noch keine Zeit, das auszusortieren:
read
#include <iostream> #include <fstream> #include <stdlib.h> #include <cmath> #include <string> #include <iomanip> #include <unistd.h> using namespace std; int main(){ int ret; string line; cout << "read (fifo reader), v1.0 by HMB" << endl; cout << "Waiting...\n"; while (true){ // Progr runs in an endless loop! ifstream inputFile; // We open the file at the beginning inputFile.open("reader"); // of the loop and close it while (line==""){ // at the end! std::getline(inputFile, line); // Thus we receive just one } // line after the other. line = "./" + line; // This is needed by the shell ;) cout << "\nReceived this command:\n"; cout << line << endl; // Control output... ret=system(line.c_str()); // Execution on system level line=""; // Empty the variable cout << "Program returned " << ret << ".\n"; cout << "\n\n===== read: Waiting for new call... =====\n"; cout << "===== [Stop w/ CTRL-C or CTRL-Z] =====\n\n"; if(inputFile.is_open()) // By closing the file we achieve inputFile.close(); // the goal to read one line in } // one loop. return 0; }
cc++
#include <iostream> #include <fstream> #include <stdlib.h> #include <cmath> #include <string> #include <iomanip> #include <cstddef> #include <cstdint> #include <bitset> using namespace std; int main(int argc, char *argv[]){ string a, b, c; cout << "\n\n===== cc++ v1.2 by HMB running: =====\n\n"; cout << "Stage I\n"; for (int ac=0;ac<argc;ac++){ // ac is loop counter/indicator cout << "ac = " << ac << ", argv[" << ac << "] = " << argv[ac] << endl; }; cout << "Stage II\n"; if (argc==1){ cout << "Fatal: No filename!" << endl; return 1; }; cout << "Stage III\n"; if (argc==2){ a=argv[1]; // Filename w/o ext cout << "argc = 1, a: " << a << endl; }; cout << "Stage IV\n"; if (argc==3){ a=argv[2]; // Filename w/o ext b=argv[1]; // Argument no. 1 and only cout << "a = " << a << ",\nb = " << b << endl; }; cout << "Stage V\n"; int onceflag = 0; if (b=="-1"){ // Compile once and finish, do not run! onceflag = 1; cout << "onceflag set\n"; }; c = "/usr/bin/g++ -std=c++17 -Wall -o " + a + " " + a + ".cpp"; int flag = 2; while (1){ int ret; if (flag==2){ cout << "Executing command:\n-> " << c << endl; ret = system(c.c_str()); cout << "Returned " << ret << endl; if (onceflag==1){ return 0; } } if (ret==0){ string arg = ""; cout << "\nEnter arguments if you wish [# for none]: "; cin >> arg; string b; if (arg != "#"){ b = "./" + a + " " + arg; } else { b = "./" + a; } cout << "\n\n===== Running your compiled program: =====\n\n"; cout << "Command: " << a << endl; system(b.c_str()); cout << "\n\n===== Your compiled program has finished. =====\n\n"; cout << "Run again? [yes w/ compile = 2, yes w/o compile = 1, no = 0] => "; cin >> flag; if (flag==0){ cout << "\n\n===== cc++ finished! =====\n\n"; break; } } } return 0; }