Gå til innhold

Anbefalte innlegg

OK jeg har ikke noe særlig forståelse for C :blush: , men jeg skulle gjerne forandret noe i et c program.

Programmet jeg ønsker å forandre er http://pm2erglib.sourceforge.net/

 

Programmet kjører som en webserver som kommuniserer med min romaskin (ja du leste riktig, se www.concept2.com)

Det jeg ønsker er å forandre denne linjen (linje 151 i denne filen http://pm2erglib.cvs.sourceforge.net/pm2er...t.c?view=markup

)

strcat(p, "Date: ");strcat(p, ctime(&hoelaat));strcat(p, "\r");

 

I dag er headeren slik

Date: Sun Feb 4 20:37:48 2007

Jeg trenger altså enten å endre denne linjen eller legge til en ny med et mer nøyaktig tidstempel. Gjerne i hundredels sekund, om tidstemplet blir i sekunder siden 1970 så er nok det ingen ulempe.

 

Jeg leste om ctime men fant ikke helt ute av dette. Kan noen hjelpe meg med denne? Jeg regner med at dette ikke er så vanskelig. Jeg mener ikke at dere skal forandre på dette på sourceforge, men bare gi meg litt veiledning for hvordan dette kan gjøres. Programmet kompilerer greit så den delen har jeg kontroll på.

 

Lars

Lenke til kommentar
Videoannonse
Annonse
I dag er headeren slik

Date: Sun Feb  4 20:37:48 2007

Jeg trenger altså enten å endre denne linjen  eller legge til en ny med et mer nøyaktig tidstempel. Gjerne i hundredels sekund, om  tidstemplet blir i sekunder siden 1970 så er nok det ingen ulempe.

 

Skal vi se, det er nok ingen garantier for at time eller ctime gir deg en nøyaktighet på millisekunders nivå. Her må du nok informerer litt mer om hvilken platform du er på etc. På mitt system har funksjonene bare sekunds granularitet, så jeg må i så tilfelle bruke noe annet.

 

se på gettimeofday (man 2 gettimeofday om du er i *nix)

 

En helt annen ting er at svaret fra vevtjeneren skal være slik, da det er en standard for hvordan dato/klokkeslett skal oppgis for at vevklientene skal skjønne det

Endret av Stryni
Lenke til kommentar

Skal vi se, det er nok ingen garantier for at time eller ctime gir deg en nøyaktighet på millisekunders nivå.  Her må du nok informerer litt mer om hvilken platform du er på etc.  På mitt system har funksjonene bare sekunds granularitet, så jeg må i så tilfelle bruke noe annet. 

 

se på gettimeofday (man 2 gettimeofday om du er i *nix)

 

En helt annen ting er at svaret fra vevtjeneren skal være slik, da det er en standard for hvordan dato/klokkeslett skal oppgis for at vevklientene skal skjønne det

7878136[/snapback]

 

Jeg takker så mye for svar. Jeg er selvsagt ;) på linux. Det ser ut som om gettimeofday kan gi meg nanosekunder. Jeg har prøvd å hacke litt med fila, den kompilerer med noen stygge advarsler. :hmm:

 

Jeg er inneforstått med at å endre headeren ikke er så lurt. Nå kjører denne på localhost så konsekevnsen er kanskje ikke så store. Uansett kunne jeg sikkert lagt tidstempelt i server feltet. Problemet er at jeg ikke kan C. Jeg aner ikke hvor mange ganger jeg har angret på at jeg ikke tok noen programeringsfag når jeg studerte.

Noen som gidder å bruke teskje modus her?

Takker

Lars

Lenke til kommentar

// Dette er header fila som definerer gettimeofday, plasser denne linja
// sammen med de andre include direktivene
#include <sys/time.h>

// Dette er variablene jeg bruker, plasser dem rett etter time_t hoelaat;
struct timeval time;
char buffer[80]; // bare en midlertidig plass for å generere strengen

// put dette etter Pragma: no-cache f.eks.
if (gettimeofday(&time, (void *) 0) == 0) {
sprintf(buffer, "X-Timestamp: %d,%.3d", (int)time.tv_sec, (int)time.tv_usec/1000);
strcat(p, buffer);
}

 

Det skulle være en grei måte å gjøre det på, da får du en ekstra header fra serveren: X-Timestamp, istedet for å endre på Date headeren. Du klarer sikkert å endre koden til å endre Date headeren om du må det :)

 

Denne koden skriver ut antall sekunder og millisekunder siden epoc slik:

 

X-Timestamp: 1170758826,909

 

Ved å bruke gmtime(&time.tv_sec) kan du få en oppstykket versjon av tiden, og kan lage et mer leselig tidsstempel:

 

printf("%.4d-%.2d-%.2d %.2d:%.2d:%.2d,%.3d",
  bdt->tm_year+1900, bdt->tm_mon+1, bdt->tm_mday,
  (bdt->tm_isdst == 0 ? bdt->tm_hour +1 : bdt->tm_hour),
  bdt->tm_min, bdt->tm_sec, (int)time.tv_usec/1000);

Gir f.eks.:

 

2007-02-06 11:56:47,734

 

Langt fra sikker på om den printf setninga er helt rett, daylight saving også videre har jeg ikke sett alt for mye på. bare gjorde det som måtte til for å få rett klokkeslett per nå :)

 

bdt er her en peker til struct tm

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...