cgi c & c sous linux

cgi c & c sous linux - Programmation

Marsh Posté le 13-10-2001 à 11:34:13    

bonjour !
voila, en compilant mes cgi sous linux, je me suis rendu compte que :  
1) strlen de (string.h) de windows, ne passait pas sous linux, je chercherais donc l equivalent :)
 
2) la methode " n a pas l air de marcher des masse..." pourtant, il s agit uniquement de lire sur l entree std mais, ca me renvoie une erreur,

Reply

Marsh Posté le 13-10-2001 à 11:34:13   

Reply

Marsh Posté le 13-10-2001 à 13:37:18    

strlen marche sous linux , c'est sur . cette fonction fait partie des fct de base du C  
tu compile avec kelle option et tu as koi comme erreurs

Reply

Marsh Posté le 13-10-2001 à 14:56:18    

slt SLVN,
 
je peux te garantir que la fonction strlen fonctionne. Le prob est ailleurs.
 
montre la partie du code qui deconne...

Reply

Marsh Posté le 14-10-2001 à 16:29:03    

oui, pardon je me suis trompé pour strlen, j avias pas mis l include..... (sous win, ca marche quand meme, surment car j incluait avant une autre fichier qui lui avait un include string.h ...)
 
donc la fonction strlen marche :)
 
mais sinon, les fonctions pour recuperer a partir des GET et POST, ca pas l air de marcher  
(  
Internal Server Error
The server encountered an internal error or misconfiguration and was unable to complete your request.
Please contact the server administrator, theftp@caramail.com and inform them of the time the error occurred, and anything you might have done that may have caused the error.
 
More information about this error may be available in the server error log.
 
 
 
--------------------------------------------------
------------------------------
 
Apache-AdvancedExtranetServer/1.3.19 Server at localhost.localdomain Port 80)
 
 
pourtant ces fonctions marchent sous windwos, enfin bon c pas tres grave je trouverais bien la panne :)
 
par contre derniere petite question :  
avec gcc, (ou g++), comment faire pour que mon_fichier.c soit directement compilé en mon_fichier.exe (et pas en a.out comme il me fiat a chauqe fois?!)

Reply

Marsh Posté le 14-10-2001 à 16:35:37    

sous linux :
creer unfichier makefile :
 
fichier:fichier.o
      (ce n esont pas des espaces ,mais une tab)gcc fichier.o -o fichier
 
fichier.o:fichier.c fichier.h
      gcc -c fichier.c -o fichier.o
 
 
puis sauvegarde et tape make fichier et hop ca compile

Reply

Marsh Posté le 14-10-2001 à 17:00:55    

eu, c ets obligé de passer par un .o ??
(gcc fichier >> directement l executable )

Reply

Marsh Posté le 14-10-2001 à 18:44:06    

salut,
 
pour ma page actu (par exemple j'utilise)
 
gcc -O3 -fomit-frame-pointer -o actu_aff.cgi actu_aff.c ../lib/maqbase3.c ../lib/libraire.c ../lib/maqtrap1.c ../lib/maqdico1.c  
 
le resultat est le fichier executable : actu_aff.cgi
 
N'oublie que tu dois produire un .CGI et non un .EXE. Apache ou IIS n'y comprendraient rien.
 
les options : -O3 -fomit-frame-pointer sont des options optimisation et facultatives. A eviter quand t'es pas absolument sur de ton code surtout pour "-fomit-frame-pointer"

Reply

Marsh Posté le 14-10-2001 à 19:14:41    

ok, ca va me simplifier la vie :))

Reply

Marsh Posté le 14-10-2001 à 19:15:39    

un exe, ca marche tres bien....
(j utilisait ca sous windows car le compilo en renvoie un, donc j avias fias mes pages avec  des href= *.exe )

Reply

Marsh Posté le 14-10-2001 à 19:38:00    

je capte pas pkoi mon prog se compile bien mais le cgi marche pas....(alors que sous win ca marchait )
j utilise stdio.h stdlib.h string.h
 
apparement, y a deux erreurs :(
une fonctions, ou j utilise que des if else, types simples et des pointeurs .....;;
 
une autre pareil, ou y a que des truc simples....
( est ce que gcc capte si je mets :
char *data ;  if (data==NULL) ......??

 

[edtdd]--Message édité par slvn--[/edtdd]

Reply

Marsh Posté le 14-10-2001 à 19:38:00   

Reply

Marsh Posté le 14-10-2001 à 22:49:47    

slt,
 
pour ma page de démarrage j'utilise ces lib sous linux
 
#include<stdio.h>
#include<fcntl.h>
#include<malloc.h>
#include<string.h>
#include<stdlib.h>
#include<sys/stat.h>
 
poour l'erreur c'est comme tu le penses certainement un prob de lib

Reply

Marsh Posté le 14-10-2001 à 23:00:24    

en fiat, c ets une erreur qui passait sous win mais pas sous linux :  je croaysi qu on pouvait utiliser free() pour liberer la memoire prise par un tableau, mais en fait, non :)  
 
par contre, la j ai un coup que je vois pas :
 
j ai l impression, qu apres :
char*data=getenv("QUERY_STRING" );
data n est jamais NULL        // enfin si gcc capte data != NULL..

Reply

Marsh Posté le 15-10-2001 à 00:27:06    

"j ai l impression, qu apres :  
char*data=getenv("QUERY_STRING" );  
data n est jamais NULL  "
 
si tu envoies un .cgi sans param la chaine sera NULL. Pour un .cgi qui n'utilise pas de param evidement le test n'a pas d'interet puisque tu ne fais pas de getenv(); par contre si un petit malin s'amuse a lancer ton .cgi sans param alors qu'il en attend et que tu n'as pas le test if(data==NULL) ou dans le même genre alors tu vas avoir un prob car tu ne peux pas faire un malloc de data si data sert au getenv et dans ce cas ta fonction de traitement de param va commencer a traiter une variable qui n'a pas d'adresse. Aie !

Reply

Marsh Posté le 16-10-2001 à 00:49:34    

en fait je me sert a la fois de GET et POST pour le mmem cgi, si y a pas de GET, je cherche un POST....
par contre la ou c est Bizare c est que :  
je peux avoir la getenv(QUERY_STRING)!=NULL et strlen(getenv(QUERY_STRING)==0, donc ca foirait mais avec un test en plus c est ok.....
(ps pourtant ca marchait sous windows, avec PWS...)
 
 
pas contre, j ai un autre pb, pour ecrire dans un fichier, :
fopen(...,w) marche
fputs(....) marche  
mais fclose(..) marche pas :((
donc a final, j ai pas de fichier....

Reply

Marsh Posté le 16-10-2001 à 01:10:59    

slt,
 
sous windows et linux ou juste sous linux ? sinon tu as peut-être un prob de droit. Mais bon moi je n'utilise pas ces fonction mais celle qui gère des handle (open/read/write).

Reply

Marsh Posté le 16-10-2001 à 13:07:11    

slt,
sous win 98  j ai pas de pb, c sous linux que ca foire... jepense aussi que c estun pb de priviliege

Reply

Marsh Posté le 16-10-2001 à 15:18:36    

j'avour que je n'ai jamais utilisé c'est fonction pour faire du traitement fichier donc je ne sais pas trop.
 
mais il me semble qu'elle utilise un tampon, donc si ton écriture ne dépasse pas la taille du tampon il n'y pas d'écrire physique. par contre le fclose provoque l'écriture physique et c'est lui qui se prend le prob des droits en ecriture.
 
tu peux modifier ces droits avec un ftp. sinon je te conseille d'utiliser les read/write. Quoiqu'il existe pour ces fonctions des diff entre win et linux. Fait un accès telnet et regarde dans le man fopen/fwrite/fclose pour voir leur utilisation il est possible que tu sois obligé d'utiliser des masques ou que les masques standart soit différents

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed