Toon posts:

[C/Linux] Aanroepen van functies uit library

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik probeer een programmatje in linux/C te maken waarmee ik in kan loggen op een FTP server. Na eindeloos klooien met sockets kwam ik uiteindelijk op een library die je programma FTP functionaliteit kan bieden. (http://www.ibiblio.org/pub/Linux/libs/ftplib-3.1-src.tar.gz)

Nu heb ik nog niet heel veel ervaring in C en ik liep al bij de FTPConnect functie vast ;)
In de help file staat:
#include <ftplib.h>
int FtpConnect(const char *host, netbuf **nControl);

> host
The name of the host machine to connect to and optionally an alternate port number to use.

> nControl
The address where the pointer to the newly created control handle should be stored.

FtpConnect() establishes a connection to the FTP server on the specified machine and returns a handle which can be used to initiate data transfers. The host name should be specified as or :. may be either a host name or ip address. may be either a service name or a port number.
Hoe moet ik deze functie precies aanroepen ? Ik heb al van alles geprobeerd.
main(){
char *host="ftp.surfnet.nl:21";
netbuf **nControl (maar ook netbuf *nControl etc. etc.)

int FtpConnect(host,nControl); (maar ook FtpConnect(host,&nControl) en FtpConnect(host,*nControl) )

}
Ik denk dat ik in de war raak van die dubbele pointer... Iemand een idee ?

Bedankt.

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 22-08 13:19

.oisyn

Moderator Devschuur®

Demotivational Speaker

Die netbuf * is waarschijnlijk een handle voor de library waarin bepaalde, voor jou onbelangrijke, informatie staat die nodig is voor de connectie.

Je kunt dit in principe net zo zien als bijvoorbeeld een int. Omdat de functie jou een error en de handle terug wilt geven, maakt ie van die handle een pointer. Het moet een pointer zijn omdat hij de waarde van je variabele aan moet passen, in plaats van dat ie alleen de inhoud wilt weten. In principe is dat gelijk aan dit:

C:
1
2
3
4
5
6
7
int functie (int * pHandle);

/* ergens in je code: */

int handle;
int error = functie (&handle);
/* handle is nu gezet naar de juiste waarde */


De library functie waar je problemen mee hebt werkt op dezelfde manier. Alleen is de handle nu geen int, maar een netbuf *

C:
1
2
netbuf * handle;
int error = FtpConnect ("bla", &handle);

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • Surehand
  • Registratie: Februari 2003
  • Laatst online: 18-08 15:40
Probeer eens
C:
1
2
3
4
5
6
7
main(){
   int return_value;
   char *host="ftp.surfnet.nl:21";
   netbuf *nControl;

   return_value = FtpConnect(host, &nControl);
}
Nu wordt het adres van de pointer naar een netbuf * (dus een netbuf **) doorgegeven.

De 'int' kan elleen gebruikt worden in een declaratie, niet in een aanroep. Je krijgt een int waarde terug.

[ Voor 5% gewijzigd door Surehand op 07-05-2003 13:38 . Reden: Doe er te lang over... ]


Verwijderd

Topicstarter
Ik had er onderhand zelf ook achter moeten komen; het bleek dat ik naast de header file de ftplib.c file ook moest includen. Met jouw hulp erbij opgeteld lijkt hij nu goed te werken ;)

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 22-08 13:19

.oisyn

Moderator Devschuur®

Demotivational Speaker

Die moet je niet includen maar apart compilen
Het werkt nu 'toevallig' omdat je maar 1 source file hebt waarin je de library gebruikt

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.