[C/C++] Header files

Pagina: 1
Acties:

  • -W0kk3L-
  • Registratie: Juni 2002
  • Laatst online: 20-12-2025
Howdi all,

Ik heb een (hopelijk) simpele vraag. Ik ben mij aan het verdiepen in c++, en ben wat verschillende examples aan het doorstruinen.

Op het moment dat ik een van de sources wil compilen, moet ik een aantal headerfiles hebben. (Ik gebruik DevC++ om te schrijven en compilen.) Echter ik kan niet alle headerfiles vinden die ik nodig heb. En volgens mij zijn het aardig 'default' files. Een voorbeeld : sys/socket.h, netinet/in.h, netdb.h en arpa/inet.h. Waar kan ik deze header files vinden voor Windows? (als ze uberhaupt al beschikbaar zijn voor Windows XP).

Ik heb al een tijdje zitten googlen, en heb socket.h al gevonden. Die compiled nu netjes mee, echter de rest heb ik nog niet.

Hoe vind je overigens in het algemeen dit soort header files? Is er een plek waar dit allemaal verzameld wordt ofzo?

Mijn dank is reeds groot.
-W0kk3l-

  • phaas
  • Registratie: Augustus 2001
  • Laatst online: 23-01-2025
De headerfiles die jij noemt, zijn voor Posix/Unix/Linux en niet voor Windows.
Ik gok dat je een aardig eind komt met het includen van windows.h, maar een aantal dingen zullen waarschijnlijk alleen werken op een Unix systeem.
Ik denk toch dat je als je onder Windows wil proggen, je beter een paar tutorials (of een boek) voor Windows/C++ kunt zoeken. ...of gewoon onder Linux beginnen natuurlijk :)

  • JayVee
  • Registratie: Mei 2002
  • Laatst online: 14-11-2025

JayVee

shibby++!

Hoe include je ze?
Als het goed is moet je het zo doen:
C:
1
2
3
4
5
6
include <socket>
// of
include <socket.h>

// en dus niet:
include "ergens/socket.h"    // dit zijn oude headers


Ben zelf niet heel erg goed in C(++) maar misschien brengt dit je op het goede spoor.

[ Voor 9% gewijzigd door JayVee op 19-06-2005 12:48 ]

ASCII stupid question, get a stupid ANSI!


  • phaas
  • Registratie: Augustus 2001
  • Laatst online: 23-01-2025
JayVee schreef op zondag 19 juni 2005 @ 12:47:
Hoe include je ze?
Als het goed is moet je het zo doen:
C:
1
2
3
4
include <socket>

// en dus niet:
include "ergens/socket.h"    // dit zijn oude headers


Ben zelf niet heel erg goed in C(++) maar misschien brengt dit je op het goede spoor.
Dit geldt alleen voor C++ include files die van STL/LIBC++ afkomstig zijn, zoals "list" en "string".
Alle andere gaan gewoon met de '.h' erachter en tussen <>'s.
De gewone "'s zijn idd alleen voor 'lokale' headers binnen je project.

dus:
Lokaal: #include "bestand.h"
STL: #include <classname>
System-wide: #include <bestand.h>

[ Voor 16% gewijzigd door phaas op 19-06-2005 12:50 ]


  • dingstje
  • Registratie: Augustus 2002
  • Laatst online: 02-01-2024
In Windows gebruik je WinSock. Zie Beejs Guide To Network Programming ivm. WinSock (http://www.ecst.csuchico....t/html/intro.html#windows) voor meer informatie. Die guide is trouwens imho dé guide die je moet hebben als je wilt leren werken met sockets.

If you can't beat them, try harder


  • truegrit
  • Registratie: Augustus 2004
  • Laatst online: 01-05 20:11
voor windows moet je winsock.h of winsock2.h gebruiken

hallo


  • -W0kk3L-
  • Registratie: Juni 2002
  • Laatst online: 20-12-2025
Ik vermoedde al dat het een stukje enkel-linux code was. Onder Linux krijg ik em wel aan de praat (onder FreeBSD om precies te zijn) Maar ik wilde het toch even proberen.

Ze stonden geinclude als:
code:
1
2
3
4
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <arpa/inet.h>


Ik ben tegelijkertijd met deze tutorial bezig: http://www.cplusplus.com/doc/tutorial/
Tot nu toe vind ik em goed uitgelegd, met veel goeie voorbeelden.

Mijn dank alvast voor de snelle reacties tot nu toe! :)

  • Radiant
  • Registratie: Juli 2003
  • Niet online

Radiant

Certified MS Bob Administrator

-W0kk3L- schreef op zondag 19 juni 2005 @ 12:50:
Ik vermoedde al dat het een stukje enkel-linux code was. Onder Linux krijg ik em wel aan de praat (onder FreeBSD om precies te zijn)
offtopic:
Ehh, Linux != FreeBSD


Winsock werkt ongeveer gelijk aan BSD sockets, voor de compatibiliteit werken sommige functies zelfs gewoon precies hetzelfde. Alle WSA* functies zijn specifiek voor winsock. Zie ook http://msdn.microsoft.com...ock/winsock_reference.asp

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 06-05 14:03

curry684

left part of the evil twins

-W0kk3L- schreef op zondag 19 juni 2005 @ 12:50:
Ik vermoedde al dat het een stukje enkel-linux code was. Onder Linux krijg ik em wel aan de praat (onder FreeBSD om precies te zijn) Maar ik wilde het toch even proberen.

Ze stonden geinclude als:
code:
1
2
3
4
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <arpa/inet.h>
Op deze manier is je code wsch compleet portable:
C++:
1
2
3
4
5
6
7
8
9
#ifdef WIN32
#include <windows.h>
#include <winsock2.h>
#else
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <arpa/inet.h>
#endif

Professionele website nodig?


  • H!GHGuY
  • Registratie: December 2002
  • Niet online

H!GHGuY

Try and take over the world...

vergeet niet om voor windows code
WSAStartup en zijn broertje WSACleanup te gebruiken

je kunt deze evt in een macro stoppen die onder *NIX niets doet:
C++:
1
2
3
4
5
6
7
#ifdef WIN32
#include <blah...> // zoals curry aangeeft
#else
#include <blah...>
#define WSAStartup(a,b)
#define WSACleanup()
#endif

ASSUME makes an ASS out of U and ME


  • Radiant
  • Registratie: Juli 2003
  • Niet online

Radiant

Certified MS Bob Administrator

Lama, zie net dat linux ook recv() en send() heeft :z

[ Voor 115% gewijzigd door Radiant op 19-06-2005 13:34 ]


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 06-05 14:03

curry684

left part of the evil twins

Radiant schreef op zondag 19 juni 2005 @ 13:32:
Lama, zie net dat linux ook recv() en send() heeft :z
Humja dat is juist een nogal vitaal onderdeel van de Berkeley Sockets API waardoor Windows die ook ondersteunt naast de custom WSASend en WSARecv calls ;)

Professionele website nodig?


  • Radiant
  • Registratie: Juli 2003
  • Niet online

Radiant

Certified MS Bob Administrator

curry684 schreef op zondag 19 juni 2005 @ 13:36:
[...]

Humja dat is juist een nogal vitaal onderdeel van de Berkeley Sockets API waardoor Windows die ook ondersteunt naast de custom WSASend en WSARecv calls ;)
Mja de code waar ik vaak mee werk (ircd, zowiezo al erg ranzig vaak) gebruikt read() en write() op linux en BSD, daar gebruik ik dus die macro's voor. Wist het tot nu net toe zelf ook niet, maar even erdoorheen om alles te veranderen in recv() en send() en die macro's weghalen :P

  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 09-04 22:08
phaas schreef op zondag 19 juni 2005 @ 12:49:
[...]


Dit geldt alleen voor C++ include files die van STL/LIBC++ afkomstig zijn, zoals "list" en "string".
Alle andere gaan gewoon met de '.h' erachter en tussen <>'s.
De gewone "'s zijn idd alleen voor 'lokale' headers binnen je project.

dus:
Lokaal: #include "bestand.h"
STL: #include <classname>
System-wide: #include <bestand.h>
Nee hoor, alle C++ headers (en niet alleen STL) zijn zonder .h :
<stdexcept>, <cstdio>, <string>

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein

Pagina: 1