IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

tube nommé et CGI


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 3
    Par défaut tube nommé et CGI
    Bonjours à tous.
    Je bosse actuellement sur un server web embarqué( BOA) et j'aimerais communiquer avec une appli tournant sur l'OS embarqué(uClinux). Pour ça, mon choix s'est porté sur les pipes nommés.

    Mon script CGI( en C ) printf les en-tête HTTP, ouvre un tube et écrit dedans. Puis enfin lit ce que l'autre programme lui répond.

    Mon problème, c'est que mon script CGI ne veut pas récupérer cette réponse. En mod terminal le programme s'éxécute parfaitement.Tout est affiché sur la sortie standart. Mais mon navigateur ne reçoit pas cette réponse lorsque je l'apelle via une form HTML.

    Voici mon code simplifié :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>                                           
    #include <sys/types.h>                                     
    #include <sys/stat.h>
    #include <fcntl.h>                   
    #include <string.h>
     
     
     
    #define S_BUF 1000
     
     
    int desc;
     
     
    void open_pipe()
    {
      if (( desc = open ("tube",O_RDWR,0666)) == -1)
    	{
            	perror ("open");
    		exit (1);
    	}
    }
     
     
     
    void wr_pipe(char* buffer)
    {
      int n;
    	n= write(desc,buffer, strlen(buffer));
      if (n == -1)
      {
        perror (buffer);
        exit (1);
      }
    }
     
     
    void rd_pipe(char* buffer)
    {
        int n;
        memset(buffer,'\0',S_BUF);
     
        n= read (desc, buffer, S_BUF);
        if (n == -1)
        {
    	    perror ("read");
    	    exit (1);
        }
    }
     
     
     
    int main()
    {
    	int n;
    	char buffer[S_BUF] = {0};
    	char tmp[S_BUF] = {0};
    	FILE *cgiOut;
    	n=51000;	  
     
    	cgiOut = stdout;
     
    	fprintf(cgiOut,"<meta content=\"text/html; charset=ISO-8859-1\"http-equiv=\"content-type\"> \n\n");
     
    	fprintf(cgiOut,"<meta Content-type: multipart/x-mixed-replace;boundary=ThisRandomString>\n");
    	fprintf(cgiOut,"<meta Connection : Keep-Alive>\n");
    	fprintf(cgiOut,"<meta Keep-Alive : timeout=15, max=100>\n");
    	fprintf(cgiOut,"<html><header><title>Test</title></header><body>\n\n");
     
    	strcpy(tmp,"<table style=\"text-align: left; width: 989px; height: 30px;\" border=\"1\"");
    	strcat(tmp,"cellpadding=\"2\" cellspacing=\"2\"><tbody><tr><td style=\"vertical-align: top;\"><a href=\"index.html\"");
    	strcat(tmp,">accueil</a></td><td style=\"vertical-align: top;\"><a href=\"description.html\">Description");
    	strcat(tmp,"de la carte</a></td>");
    	strcat(tmp,"<td style=\"vertical-align: top;\"><a href=\"config.html\">config</a><br>");
    	strcat(tmp,"<td style=\"vertical-align: top;\"><a href=\"type.html\">type</a><br></td></tr></tbody></table>\n");
     
     
     
    	fprintf(cgiOut,"%s\n",tmp);
     
     
     
     
     
    	open_pipe();	
    	wr_pipe("banniere : ");  
     
    	rd_pipe(buffer);
     
     
    	fprintf(stdout,"%s\n",buffer);
     
     
     
     
    	close(desc);
    	return 0;
    }
    De l'autre coté du tube, le programme renvoit du HTML simple.

    Si vous avez une idée du pourquoi du comment , je suis preneur.

    Merci.

  2. #2
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 3
    Par défaut
    Apparemment, le nouveau code source de BOA fait buguer les fopen/open.

    Si quelqu'un a solution pour y remédier je suis preneur.

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 3
    Par défaut
    ou du moins quelqu'un connait une alternative à BOA au niveau de l'embarquée?

Discussions similaires

  1. probleme lecture et ecriture dans les tube nommés
    Par El-Patron dans le forum POSIX
    Réponses: 0
    Dernier message: 28/11/2009, 10h58
  2. Ecriture dans un tube nommé
    Par prgasp77 dans le forum Administration système
    Réponses: 7
    Dernier message: 17/11/2009, 14h01
  3. Tubes nommés (named pipes) asynchrones
    Par piziwate dans le forum C
    Réponses: 8
    Dernier message: 18/12/2007, 19h41
  4. tube nommé en C
    Par yann999 dans le forum POSIX
    Réponses: 7
    Dernier message: 24/11/2006, 11h10
  5. Tube nommé: un casse tête
    Par yashiro dans le forum Linux
    Réponses: 2
    Dernier message: 28/06/2006, 09h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo