gogodidi Skrevet 23. mai 2005 Del Skrevet 23. mai 2005 På Windows kan man bare #include <windows.h> og deretter bruke system("C:\\blabla.exe"); til å kjøre et program, men hvordan er det mulig å starte et program under Linux? Lenke til kommentar
GeirGrusom Skrevet 23. mai 2005 Del Skrevet 23. mai 2005 Du kan gjøre det samme i Linux, system() ligger i <stdlib.h> Lenke til kommentar
gogodidi Skrevet 23. mai 2005 Forfatter Del Skrevet 23. mai 2005 (endret) hvordan er det mulig å kjøre et program med parametere som skal ingis av brukeren? liksom, jeg har lyst at brukeren skal kunne definere hvilken iso fil skal mountes char input[1000]; cin >> input; //brukeren ingir plass av iso fil system("sudo mount -o loop -t iso9660 ***input*** /mnt/iso"); //***input*** skal bli det som brukern gir inn, hvordan legger jeg de to tingene sammen? Endret 23. mai 2005 av gogodidi Lenke til kommentar
GeirGrusom Skrevet 23. mai 2005 Del Skrevet 23. mai 2005 (endret) sprintf funksjonen er ganske enkel å bruke int sprintf( char *buffer, const char *format [, argument] ... ); #include <stdio.h> #include <stdlib.h> #include <iostream> int main(int argc, char **argv) { char input[1000] char *my_string = new char[1000]; std::cin >> input; sprintf(my_string, "sudo mount -o loop -t iso9660 %s /mnt/iso", (char*)&input) system(my_string); delete [] my_string; return 0; } Endret 23. mai 2005 av GeirGrusom Lenke til kommentar
Orjanp Skrevet 23. mai 2005 Del Skrevet 23. mai 2005 (endret) Kan du ikke lage en streng variabel som inneholder hele kommandoen? Slik at kallet blir slik: system(string); String variabelen er vel relativt lett å manipulere. EDIT: GeirGrusom var før meg. Der har du også kode eksempel på hvordan det gjøres. Endret 23. mai 2005 av Orjanp Lenke til kommentar
GeirGrusom Skrevet 23. mai 2005 Del Skrevet 23. mai 2005 (endret) Ja, du kan jo bruke string my_string; string input; std::cin >> input; my_string = "sudo mount -o loop -t iso9660 " + input + " /mnt/iso"; system(my_string); Endret 23. mai 2005 av GeirGrusom Lenke til kommentar
gogodidi Skrevet 23. mai 2005 Forfatter Del Skrevet 23. mai 2005 (endret) å bruke en pointer var jo en god ide *orjanp, jeg har lyst å lage programmet slika t jeg ikke hele tiden må taste in det samme, jeg kunne jo bruke komando linjen istedenfor da Endret 23. mai 2005 av gogodidi Lenke til kommentar
kattemat Skrevet 23. mai 2005 Del Skrevet 23. mai 2005 Ta en titt på exec(2) familien eller execve(2) man exec man exeve for litt mer sofistikerte måter å initiere prosesser. Om du fortsatt vil kjøre gjeldene prosess(dvs. lage en ny prosess) så bør du også ta en titt på fork(2) Lenke til kommentar
Orjanp Skrevet 23. mai 2005 Del Skrevet 23. mai 2005 (endret) *orjanp, jeg har lyst å lage programmet slika t jeg ikke hele tiden må taste in det samme, jeg kunne jo bruke komando linjen istedenfor da Det er ikke noe forskjell på disse to: Eks1. string tmp = "en fin kommando"; system(tmp); Eks2. system("en fin kommando"); Forskjellen ligger i at i første eksempel kaller du system med en variabel og kan manipulere variabelverdien før du kaller system. Det var vel det du var interessert i. Å kunne legge input fra tastaturet til kommandoen din. Regnet med at du visste hvordan man la sammen to strenger, eller som i ditt tilfelle, la en streng inni en annen streng. Derfor ønsket jeg å vise at du ikke trengte å bruke eks2, men kunne istedetfor bruke eks1. Nå har GeirGrusom gitt deg hele koden på hvordan du kan gjøre dette. Jeg valgte å ikke gjøre det fordi jeg regnet med at du klarte det selv bare du fikk en dytt i riktig retning. Mulig jeg var litt for vag. Ørjan... Endret 23. mai 2005 av Orjanp Lenke til kommentar
kyrsjo Skrevet 23. mai 2005 Del Skrevet 23. mai 2005 er det sånn at sprintf() er det samme som printf() mht. syntax etc - men at den istedet for å skrive resultatet på skjermen, returnerer en variabel? Altså dette er det samme: char[100] test; char[100] annenstreng = "hallaballa"; int variabel = 2; test = sprinf("hei %d %s", variabel, annenstreng); printf("%s", test); som dette: char[100] test; char[100] annenstreng = "hallaballa"; int variabel = 2; prinf("hei %d %s", variabel, annenstreng); Eller loker jeg nå, og du må loke masse med pekere etc... ? Planlegger en GTK (?) GUI til gravitymap som funker ved å manipulere input-linja, så det hadde vært greit å vite Lenke til kommentar
kattemat Skrevet 23. mai 2005 Del Skrevet 23. mai 2005 er det sånn at sprintf() er det samme som printf() mht. syntax etc - men at den istedet for å skrive resultatet på skjermen, returnerer en variabel? Altså dette er det samme: char[100] test; char[100] annenstreng = "hallaballa"; int variabel = 2; test = sprinf("hei %d %s", variabel, annenstreng); printf("%s", test); som dette: char[100] test; char[100] annenstreng = "hallaballa"; int variabel = 2; prinf("hei %d %s", variabel, annenstreng); Eller loker jeg nå, og du må loke masse med pekere etc... ? Planlegger en GTK (?) GUI til gravitymap som funker ved å manipulere input-linja, så det hadde vært greit å vite Du har rett i teorien, men syntaks og litt anna er feil. sprintf(3) skriver resultatet til en peker til _preallokert_ minne. Pekeren sendes som første argument, ellers er syntaxen lik printf(3). sprintf(3) er en typisk buffoer overflow felle, snprintf(3) er den "trygge" versjonen. Eksempel: char szOutput[sTRLEN]; /* Dette kan gi en buffer overflow */ sprintf(szOutput, "Test: %s", szUserInputString); /* denne er "safe" */ snprintf(szOutput, STRLEN, "Test: %s", szUserInputString); Lenke til kommentar
GeirGrusom Skrevet 24. mai 2005 Del Skrevet 24. mai 2005 *orjanp, jeg har lyst å lage programmet slika t jeg ikke hele tiden må taste in det samme, jeg kunne jo bruke komando linjen istedenfor da Det er ikke noe forskjell på disse to: Eks1. string tmp = "en fin kommando"; system(tmp); Eks2. system("en fin kommando"); For å pirke litt, det er en bitteliten forskjell, men ikke som hverken bruker, eller programmerer ville merke. Lenke til kommentar
Orjanp Skrevet 24. mai 2005 Del Skrevet 24. mai 2005 Ja, det var igrunn det jeg ville fram til. Resultatet er det samme uavhengig av hvilken måte dette gjøres på. Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå