pomoc za struct

pomoc za struct

offline
  • Pridružio: 15 Jul 2009
  • Poruke: 150

Pozz, trenutno sam u fazi ucenja c jezika a php znam "onako, solidno", i imam sledeci problem:
cod izgleda ovako:
struct input_event {    struct timeval time;    unsigned short type;    unsigned short code;    unsigned int value; }; printk("time=%d, type=%d, code=%d, value=%u", input_event.time->tv_sec, input_event->type, input_event->code, input_event->value);

Dobijam sledecu gresku prilikom kompilovanja:

error: request for member 'time' in something not a structure or union
error: request for member 'type' in something not a structure or union
error: request for member 'code' in something not a structure or union
error: request for member 'value' in something not a structure or union

Stvatno imam problem sa ovim strukturama i pozivanjem clanova, konkretno clana time...itd znali neko kako da pozovem ovo u printk, i gde gresim?



Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
offline
  • bocke  Male
  • Moderator foruma
  • Glavni moderator Linux foruma
  • Veliki Pingvin
  • Guru
  • Pridružio: 16 Dec 2005
  • Poruke: 12488
  • Gde živiš: Južni pol

Šta pokušavaš da uradiš? Zašto prvo ne pokušaš sa jednostavnijim primerom struktura, pre prelaska na kernel programiranje?

Ovim si definisao novi tip podataka "struct input_event", ne i mesto gde će ti podaci biti skladišteni.

Možeš da uradiš nešto poput
struct input_event {    struct timeval time;    unsigned short type;    unsigned short code;    unsigned int value; }; struct input_event event;

ili

struct input_event{    struct timeval time;    unsigned short type;    unsigned short code;    unsigned int value; }event;

S time da struct timeval mora biti prethodno definisana ili ćeš dobiti grešku.

Takođe, da bi koristio strukturu moraš prvo da je incijalizuješ, bilo koristeći već popunjenu strukturu istog tipa, bilo incijalizacijom memorije pomoću malloc. U prvom slučaju već možeš da koristiš komande za prikaz podataka. U drugom slučaju moraš podatke da uneseš naknadno. U suprotnom, rezultat je nedefinisan.

Ako koristiš strukturu koja je već definisana u nekom headeru onda nije potrebno da je ponovo definišeš. Novu strukturu možeš da definišeš pomoću:

struct input_event event;

Naravno i u ovom slučaju moraš da je popuniš nečim pre koriščenja.

Što se tiče samog programiranja koristeći Linuks input drajvere, baci pogled ovde:
http://www.mjmwired.net/kernel/Documentation/input



offline
  • Pridružio: 15 Jul 2009
  • Poruke: 150

Napisano: 13 Avg 2011 12:05

Ok hvala, gledao sam dokumentaciju i znam odprilike kako to da uradim, ali jako mi je komplikovan ovaj jezik i tesko mi je da ga skontam, a trudim se. Nesto je slicno jeziku php i mogu da razumem ali ove strukture me ubise hehe. Jeste timeval i input_event je vec definisano u input.h, samo sam hteo da pomocu printk printujem nesto ali nemam iskustva sa pristupanjem nekom clanu. Znaci ako sam dobro razumeo, ovo sam kopirao iz input.h i postavio u *.c gde pokusavam da uradim printk, verovatno sam zato i dobio gresku jer input.h je includovan? input.h:
struct input_event{
struct timeval time;
unsigned short type;
unsigned short code;
unsigned int value;
}
, dali sam samim tim "undef" input_event koji je vec bio definisan u input.h ??? Verovatno zato i dobijam onu gresku?

Ako jesam "undef", dali mogu samo da pristupim clanu time,type,code,value iz strukture input_event bez da ponovo definisem strukturu, i kako to da uradim?? Ako ti nije problem da mi das primer kako da izvedem onaj printk, tako bi i skontao i sam za dalje, ovde je time.h a ovde je input.h a ovde pokusavam da uradim printk, konkretno pokusavam da dobijem u dmesg "unsigned short code za EV_KEY" pritiskom na odredjeno dugme, a smestio sam ga u funkciju synaptics_ts_work_func(), hvala ti!

Dopuna: 13 Avg 2011 12:49

Trenutno sam definisao ovako:
struct input_event *eventk;

a printk ovako:
printk("TEST EVENT: time=%d, type=%d, code=%d, value=%u\n", eventk->time.tv_sec, eventk->type, eventk->code, eventk->value);

i sve je proslo, samo sto dobijam upozorenje: warning: format '%d' expects type 'int', but argument 2 has type '__kernel_time_t'

Dali sam na dobrom putu?

offline
  • Pridružio: 14 Nov 2011
  • Poruke: 2

probaj sa ovim tut

Ko je trenutno na forumu
 

Ukupno su 1106 korisnika na forumu :: 48 registrovanih, 3 sakrivenih i 1055 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 3466 - dana 01 Jun 2021 17:07

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: airsuba, Alibaba1981, amaterSRB, amstel, babaroga, bigfoot, Bobrock1, bojank, Boris Bosiljčić, BORUTUS, Centauro, cifra, doom83, draganl, flash12, gorican, havoc995, ILGromovnik, Istman, Ivica1102, Joja, kinez88, KOV, kybonacci, macak44, mačković, MB120mm, Mercury, milenko crazy north, Misirac, Nemanja.M, nuke92, ObelixSRB, radionica1, robert1979, Romibrat, rovac, slonic_tonic, Srle993, vathra, virked, Vlad000, wizzardone, wolverined4, ZetaMan, zixmix, zlaya011, 1107