Ubuntu Suomen keskustelualueet
Ubuntun käyttö => Ohjelmointi, palvelimet ja muu edistyneempi käyttö => Aiheen aloitti: kamara - 04.04.22 - klo:16.52
-
Elikkä siis haluaisin aluksi ottaa tty-laitteelta ottaa talteen logia, ja tallentaa sen tiedostoon.
Sen jälkeen haluaisin lähettää tty-laitteelle samaisen login ja samoilla aika-arvoilla.
En oikein keksinyt googlaukseen sopivaa hakusanaa, joten niitäkin voi ehdotella.
Toki tällaisen voisi tehdä itsekin, mutta mieluummin käyttäisin valmista softaa.
Tällaisen löysin googlaamalla, mutta tästä puuttuu login toistaminen comporttiin.
https://elinux.org/Grabserial
Välttämättä ohjelman ei tarvitse lähettää binääri-muodossa.
Elikkä siis se ottaa vastaan com-tietoa aikaleimoilla, muttei käsittääkseni lähetä samaa testidataa comporttiin samoilla viiveillä.
-
Koodasin itsellen todennäköisesti riittävän (purkka)ratkaisun.
koodaus.cpp
#include <iostream>
#include <ctime>
#include <iomanip>
#include <chrono>
#include <unistd.h>
inline uint64_t get_timestamp()
{
std::chrono::time_point<std::chrono::steady_clock> ts = std::chrono::steady_clock::now();
return std::chrono::duration_cast<std::chrono::microseconds>(ts.time_since_epoch()).count();
}
int main()
{
std::string s=std::string("");
uint64_t delaytime=get_timestamp();
while (1) {
//usleep(1000);
s="";
getline(std::cin, s);
if (s!="") {
std::cout << ( get_timestamp()-delaytime)
<< "\n"<< s << "\n";
}
delaytime=get_timestamp();
}
}
dekoodaus.cpp
#include <iostream>
#include <ctime>
#include <iomanip>
#include <chrono>
#include <unistd.h>
inline uint64_t get_timestamp()
{
std::chrono::time_point<std::chrono::steady_clock> ts = std::chrono::steady_clock::now();
return std::chrono::duration_cast<std::chrono::microseconds>(ts.time_since_epoch()).count();
}
int main()
{
std::string s="";
uint64_t delaytime; // = atol(&(s[0]));
while (1) {
getline(std::cin,s);
delaytime=atol(&(s[0]));
if(delaytime==0)
return 1;
usleep(delaytime);
getline(std::cin,s);
//std::cout << delaytime << "\n";
std::cout << s << "\n";
s="";
}
}