Proč nejde funkce system() (s mysql c api ) ? – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Proč nejde funkce system() (s mysql c api ) ? – C / C++ – Fórum – Programujte.comProč nejde funkce system() (s mysql c api ) ? – C / C++ – Fórum – Programujte.com

 

tomáš polz0
Návštěvník
16. 5. 2006   #1
-
0
-

toto je m?j zdroj?k

#include <mysql/mysql.h>

#include <stdio.h>

char prikaz[20]="ping -c 2 10.0.0.3";//totto mi ne?lo nadefinovat lok?ln? hl?silo:
//neopr?vn?n? p??stup k pam?ti
int main()
{

MYSQL *mysql;
MYSQL_RES *res;
MYSQL_ROW row;
char* query;
char* ping;
int t,r;
mysql_init(mysql);
if (!mysql_real_connect(mysql,"localhost","root",
"ginger","ping",0,NULL,0))
printf( "Error connecting to database: %sn",mysql_error(mysql));

else printf("Connected...n");

query="select * from ip";
t=mysql_real_query(mysql,query,(unsigned int) strlen(query));
if (t)
{
printf("Error making query: %sn",
mysql_error(mysql));
}
else printf("Query made...n");
res=mysql_store_result(mysql);
row=mysql_fetch_row(res);
ping=(char *) malloc(20);
sprintf(ping,"ping -c 2 %s",row[1]);
printf("Tady by mel za??t vykon?vat ping pomoc? funkce systemn");
system("ping -c 2 10.0.0.3");
system(ping);
system(prikaz);
printf("Tady by mel skon?itn");
/*printf("po?et sloupcu=%dn",mysql_num_fields(res));
printf("po?et radku=%dn",mysql_num_rows(res));
printf("Verze serveru %sn",mysql_get_server_info(mysql));*/
mysql_free_result(res);
mysql_close(mysql);

return 0;
}

A toto je m?j v?stup
 tommassino@tuxhouse:~/program$ ./mysql

Connected...
Query made...
Tady by mel za??t vykon?vat ping pomoc? funkce system
Tady by mel skon?it
tommassino@tuxhouse:~/program$

jinak rozhodn? by m?li fungovat v?echny t?? způsoby toho vol?n? system.nebot tady je progr?mek kde to funguje jak m?
jeho zdroj?k
#include<stdio.h>

int main()
{
char *string;
char *ip;
char prikaz[20]="ping -c 2 10.0.0.3";
ip="10.0.0.3";
string=(char *) malloc(20);
sprintf(string,"ping -c 2 %s",ip);
printf("nnping ?islo jedna:n");
system(string);
printf("nping ?islo dva:nn");
system(prikaz);
printf("nping ?islo tri:nn");
system("ping -c 2 10.0.0.3");
return 0;
}

a jeho o?ek?v?n? v?stup



ping ?islo jedna:

PING 10.0.0.3 (10.0.0.3) 56(84) bytes of data.
64 bytes from 10.0.0.3: icmp_seq=1 ttl=64 time=0.187 ms
64 bytes from 10.0.0.3: icmp_seq=2 ttl=64 time=0.175 ms

--- 10.0.0.3 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 999ms
rtt min/avg/max/mdev = 0.175/0.181/0.187/0.006 ms

ping ?islo dva:

PING 10.0.0.3 (10.0.0.3) 56(84) bytes of data.
64 bytes from 10.0.0.3: icmp_seq=1 ttl=64 time=0.182 ms
64 bytes from 10.0.0.3: icmp_seq=2 ttl=64 time=0.176 ms

--- 10.0.0.3 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 999ms
rtt min/avg/max/mdev = 0.176/0.179/0.182/0.003 ms

ping ?islo tri:

PING 10.0.0.3 (10.0.0.3) 56(84) bytes of data.
64 bytes from 10.0.0.3: icmp_seq=1 ttl=64 time=0.182 ms
64 bytes from 10.0.0.3: icmp_seq=2 ttl=64 time=0.173 ms

--- 10.0.0.3 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 999ms
rtt min/avg/max/mdev = 0.173/0.177/0.182/0.014 ms
tommassino@tuxhouse:~/program$


Nahlásit jako SPAM
IP: ...–
Jura_0
Stálý člen
16. 5. 2006   #2
-
0
-

Tak me napada, jestli pri pouziti mysql, ve vasi aplikaci muzete pouzivat i jine fce vyuzivajici spojeni. Jestli by to nebylo treba dat do vlastni threadu, nebo tak neco?
Kazdopadne se o tom mozna muzete presvedcit, tak ze:
1) navazete spojeni s mysql serverem
2) vyberete pozadanovany udaj a ten ulozite do promenne
3) zavrete spojeni s MySQL serverem
4) zavolate system s pozadadovanym prikazem

POtom sem napiste, jak jste dopadl a pripadne link odkud jste stahoval MySQl soubory pro C(zajima me to).

Nahlásit jako SPAM
IP: ...–
tomáš polz0
Návštěvník
16. 5. 2006   #3
-
0
-

co se t??e t?chto soubor? mysql knihoven a funkc? (a hlavi?kov?ch soubor?) tak ty se u linuxu(nev?m jak u win) v p??pad? kompilace ze zdroj?k? zkop?ruj? do adres??e s knihovnami sami.v p??pad? mysql z bin?rky(v m?m p??pad? debian) bylo pot?eba klasik? mysql-server(s nim se nainstaloval - mysql-client)a d?le je?t? bal??ek libmysqlclient-dev
Jinak toto va?e(je mi 17.5 tak?e to vyk?n? nen? t?eba :-) ) ?e??n? m? u? taky napadlo ale ??dn? zaznamenan? zm?na

Nahlásit jako SPAM
IP: ...–
Jura_0
Stálý člen
16. 5. 2006   #4
-
0
-

tommassino napsal:

co se t??e t?chto soubor? mysql knihoven a funkc? (a hlavi?kov?ch soubor?) tak ty se u linuxu(nev?m jak u win) v p??pad? kompilace ze zdroj?k? zkop?ruj? do adres??e s knihovnami sami.v p??pad? mysql z bin?rky(v m?m p??pad? debian) bylo pot?eba klasik? mysql-server(s nim se nainstaloval - mysql-client)a d?le je?t? bal??ek libmysqlclient-dev
Jinak toto va?e(je mi 17.5 tak?e to vyk?n? nen? t?eba :-) ) ?e??n? m? u? taky napadlo ale ??dn? zaznamenan? zm?na


Mno, ja teda Linux zrovna doma nemam, ale to by nemel byt problem.
Co se tyce:


char prikaz[20]="ping -c 2 10.0.0.3";

Ani se nedivim, ze ti to neslo, jen se divim ze to sezral kompilator jako globalni prom. Takhle prirazujes retezec do posledniho znaku, coz je nesmyls. Pokud chces udelat jenom konstatni retezec, tak to staci vytvorit ukazatel na literal.


char *prikaz="ping -c 2 10.0.0.3";
//pripadne, coz je jinak zapsane to same, jako vyse
char prikaz[]="ping -c 2 10.0.0.3";
?
Jinak jsem se v manualu docetl, ze pokud chces pouzivat jedno spojeni pro vice ucelu, tak se musi pouzit mutexy(otazkou je, jestli jsem to spravne pochopil).
Kazdopadne tady je odkaz http://dev.mysql.com/doc/refman/5.0/en/threaded-clients.html. To, ze je to pro threded clients nevadi, v textu je dal popsano, ze mysql_init vytvari vlakno, takze bych rekl, ze se vzdy vytvari aplikace s vlaknem. A kdyz ani to nepomuze, tak zkusit nejaky fork(), ale to si momentalne nevzpomenu(musel bych hledat - na to jsem zrovna moc liny).
P.S.: Vykam, protoze nevim kdo zatim PC sedi. Ale jinak napodobne, nejsem zrovna o moc starsi.

Nahlásit jako SPAM
IP: ...–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 77 hostů

Podobná vlákna

Proc to nejde — založil bbtrash

Csfd api - proc nefunguje — založil Dan

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý