Ok.
Donc en C de base, rien n'existe evidemment :) tu peux essayer à coup de strtok de "splitter" ta chaine mais tu risques d'avoir un truc sale, de plus si je ne me trompe pas, il est fortement déconseillé d'utiliser cette fonction.
Sinon, tu peux te tourner vers une lib.
Un rapide apt-cache search me donne la libcurl ou la libwww ... après je ne sais pas si elle vont avoir LA fonction que tu recherches, à toi de fouiller la doc.
Sinon, il te reste la fameuse libpcre pour faire des jolies expressions régulières ...
Ou faire une recherche de la position du premier /, puis position du / suivant ou ":" (prendre le premier qui se présente), et extraire la sous-chaine entre les 2 bornes.
#include <stdio.h>
#include <string.h>
#include <alloca.h>
#define METHOD_SIZE (sizeof("http://") - 1)
int get_host(const char *url, unsigned int len, char **res, unsigned int size)
{
unsigned int i;
/* chaine vide */
if ( 0 > len )
return 0;
/* chaine ne contenant meme pas la methode ... */
if ( METHOD_SIZE > len )
return 0;
for ( i = METHOD_SIZE; i < len; i++ ) {
if ( '/' == url[i] )
break;
}
/* pas assez de memoire pour contenir le resultat */
if ( size < len )
return -1;
len = i - METHOD_SIZE;
memcpy(*res, &url[METHOD_SIZE], len );
return len;
}
int main(int ac, char *av[])
{
char *host = 0;
int len = 0;
if ( ac < 2 )
return 1;
host = (char *) alloca(32);
len = get_host(av[1], strlen(av[1]), &host, 32);
if ( 0 < len )
printf("host: %.*s\n", len, host);
else
printf("ret: %d\n", len);
return 0;
}
Il a fallu que je relise en détail le deuxième commentaire du journal pour saisir, moi aussi. Bon tant pis, c'est toujours une référence à connaître ...
# Hmmm
Posté par LaBienPensanceMaTuer . Évalué à 3.
[^] # mes excuses
Posté par Juke (site web personnel) . Évalué à 1.
bah par exemple:
fonction("http://linuxfr.org/forums/19/5686.html(...)")
me renvoit:
"linuxfr.org"
[^] # Re: mes excuses
Posté par LaBienPensanceMaTuer . Évalué à 2.
Donc en C de base, rien n'existe evidemment :) tu peux essayer à coup de strtok de "splitter" ta chaine mais tu risques d'avoir un truc sale, de plus si je ne me trompe pas, il est fortement déconseillé d'utiliser cette fonction.
Sinon, tu peux te tourner vers une lib.
Un rapide apt-cache search me donne la libcurl ou la libwww ... après je ne sais pas si elle vont avoir LA fonction que tu recherches, à toi de fouiller la doc.
Sinon, il te reste la fameuse libpcre pour faire des jolies expressions régulières ...
[^] # Re: mes excuses
Posté par jigso . Évalué à 1.
[^] # Re: mes excuses
Posté par jigso . Évalué à 2.
(oui, je sais c'est par là -->[], poussez pas)
# GNet lib
Posté par Damien Pobel (site web personnel) . Évalué à 1.
Bon après si tu as pas besoin de la libgnet plus que ça tu peux aussi le faire toi-même, ça droit pas être très compliqué à faire...
https://damien.pobel.fr
[^] # Re: GNet lib
Posté par forc3 . Évalué à 2.
# man gethostbyname
Posté par Obsidian . Évalué à 1.
#include <netdb.h>
extern int h_errno;
struct hostent *gethostbyname(const char *name);
#include <sys/socket.h> /* pour avoir AF_INET */
struct hostent *gethostbyaddr(const char *addr,
int len, int type);
Sinon, dans les deux sens, depuis le shell, tu utilises tout simplement :
$ host
[^] # Erratum !
Posté par Obsidian . Évalué à 1.
Il a fallu que je relise en détail le deuxième commentaire du journal pour saisir, moi aussi. Bon tant pis, c'est toujours une référence à connaître ...
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.