Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien
Toon posts:

c programmatje voor lptpoort log-probleempje

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik ben geen c-expert, maar het is me toch gelukt een programma te schrijven, die de lpt-poort kan aan sturen. Ik heb via een schakeling 8 relais achter de data-lijnen van de lpt-poort hangen, en die stuur ik aan via het onderstaande programma in C. als ik bijvoorbeeld ./LPT 1 doe, wordt uitgang 1 hoog, en de andere uitgangen blijven ongewijzigd. met -1 wordt uitgang 1 laag en de andere uitgangen blijven ongewijzigd.
Dit programma stuur ik aan via php. Werkt best mooi, maar ik ben niet snel tevreden, dus er moet nu ook nog een logfile worden bijgehouden. Hier kom ik niet helemaal uit, waarschijnlijk is het iest simpels. ik krijg bij het compileren de volgende foutmeleding:

49: Let op: passing argument 1 of 'fputs' makes pointer from integer without a cast

een declaratie probleem denk ik?

weet iemand raad?

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#include <stdio.h>
#include <unistd.h>
#include <sys/io.h>
#include <stdlib.h>
#include <time.h> 
#include <locale.h>

#define BASEPORT 0x378           /* LPT1 *

main(int argc, char **argv)
{                    
int value;
int status;
char temp;

if (argc!=2)
    fprintf(stderr, "Error: Wrong number of arguments. This program needs one argument which is number between -255 and 255.\n"), exit(1);

if (sscanf(argv[1],"%i",&value)!=1)
    fprintf(stderr, "Error: Parameter is not a number.\n"), exit(1);

if ((value<-255) || (value>255))
    fprintf(stderr, "Error: Invalid numeric value. The parameter number must be between -255 and 255\n"), exit(1);

if (value==0)
    fprintf(stderr, "Error: Invalid numeric value. The parameter can not be 0\n"), exit(1);
if (ioperm(BASEPORT,3,1))
    fprintf(stderr, "Error: Couldn't get the port at %x\n", BASEPORT), exit(1);
  temp=value;                           /* value opslaan in temp voor logbestand *
  status=inb (BASEPORT);                    /* Status lpt-poort ophalen *
  if (value>0){status=(status|value);}              /* Invoer>0 status of invoer *
  if (value<0){value=(-value);status=(status& ~ value);}    /* Invoer<0 status en niet invoer *
  outb (status,BASEPORT);                   /* status naar lpt-poort schrijven *

char *l;                            /* Het volgende stuk is om de huidige *
time_t t;                           /* datum op te halen... *
struct tm *tm;
char s[100];
l = setlocale(LC_TIME,"");
if (l==NULL) return 1;
t = time(NULL);
tm = localtime(&t);

FILE *file;                         /* Een log-bestandje bijhouden
file=fopen("lpt.log","a");
if(file==NULL){return 1;}
else {
 fputs((asctime(tm)),file);
 fputs(temp,file);                      /* Hier gaat het mis
 fclose(file);
  }
return 0;
}

  • Amotea
  • Registratie: Mei 2004
  • Laatst online: 23-01 17:45
fputs() verwacht als eerste argument een null-terminated string in de vorm van een const char*, jij geeft hem een char.

Verwijderd

Topicstarter
Ik weet dat ik wat fout doe, maar hoe zet die integer om naar een conts char*

  • Amotea
  • Registratie: Mei 2004
  • Laatst online: 23-01 17:45
Het beste kun je hiervoor fprintf() gebruiken (http://www.cplusplus.com/...brary/cstdio/fprintf.html).

C:
1
fprintf(file, "%d", temp);

Verwijderd

Topicstarter
Hartelijk dank, nu werkt het zoals ik wil.
er valt nog heel wat te leren in C, maar als je het eenmaal een beetje snapt, kan het het leven ook een stuk makkelijker maken