Pokaż wyniki 1 do 9 z 9

Temat: Program, który skompliuje inny program

  1. #1
    Zarejestrowany
    Jul 2008
    Skąd
    Za twoimi plecami
    Postów
    351

    Domyślnie Program, który skompliuje inny program

    Na potrzeby większego programu, który chcę napisać, napisałem programik, który skompiluje jakiś inny plik.cpp. Chciałem być pewnym, że w tym dużym programie będzie wszystko OK. No i dobrze, że sprawdziłem czy będzie działać, bo nie działa
    Ktoś wie jak to napisać, żeby działało? Ja próbowałem taki kod uruchomić:
    Kod:
    #include <unistd.h>
    char *cosik[2] ;
    main() {
    cosik[0] = "/usr/bin/g++ -o test test.cpp" ;
    cosik[1] = NULL ;
    
    execve("/usr/bin/g++", cosik, NULL) ;
    
    
    
    }
    W tym samym katalogu, co wykonywany plik znajduje się ów plik test.cpp
    Pewnie źle funkcję execve wywołuję
    Teraz kompliacja:
    [ormi@localhost wirus]$ g++ -o cosik cosik.cpp
    cosik.cpp: In function ‘int main()’:
    cosik.cpp:5: warning: deprecated conversion from string constant to ‘char*’

    Czyli oprócz warna wszystko OK.
    Uruchomienie
    [ormi@localhost wirus]$ ./cosik
    g++ -o test test.cpp: no input files

    BUUUUU! Nie działa
    Black Coders | Hacking, Kernel, Linux, Operating Systems, Programming
    I otworzyła studnię Czeluści,
    a dym się uniósł ze studni jak dym z wielkiego pieca,
    i od dymu zaćmiło się słońce i powietrze.
    A z dymu wyszła szarańcza na ziemię,
    i dano jej moc jaką mają ziemskie skorpiony.
    (...)
    I dano jej nakaz aby nie zabijała,
    lecz aby przez pięć miesięcy cierpieli katusze...

  2. #2
    Zarejestrowany
    May 2008
    Postów
    534

    Domyślnie

    ./test.cpp

  3. #3
    Zarejestrowany
    Jul 2008
    Skąd
    Za twoimi plecami
    Postów
    351

    Domyślnie

    Zmieniłem:
    Kod:
    #include <unistd.h>
    char *cosik[2] ;
    main() {
    cosik[0] = "/usr/bin/g++ -o test ./test.cpp" ;
    cosik[1] = NULL ;
    
    execve("/usr/bin/g++", cosik, NULL) ;
    
    
    
    }
    Nic z tego:
    [ormi@localhost wirus]$ ./cosik
    test.cpp: no input files

    EDIT: Halo!! To pomoźe ktoś? Próbowałem też funkcji execl, ale nie pomaga. Przy uruchamianiu programu nie wyskakuje żaden błąd, ale też plik test.cpp się nie kompiluje
    Ostatnio edytowane przez Ormi : 07-25-2008 - 09:10
    Black Coders | Hacking, Kernel, Linux, Operating Systems, Programming
    I otworzyła studnię Czeluści,
    a dym się uniósł ze studni jak dym z wielkiego pieca,
    i od dymu zaćmiło się słońce i powietrze.
    A z dymu wyszła szarańcza na ziemię,
    i dano jej moc jaką mają ziemskie skorpiony.
    (...)
    I dano jej nakaz aby nie zabijała,
    lecz aby przez pięć miesięcy cierpieli katusze...

  4. #4
    Zarejestrowany
    Jul 2008
    Skąd
    Za twoimi plecami
    Postów
    351

    Domyślnie

    @up: Poprawka, zapomniałem o ostatnim argumencie przy execl. Daję tam NULL. Przy uruchmianiu programu:
    [ormi@localhost wirus]$ ./cosik
    g++: A�: Nie ma takiego pliku ani katalogu
    g++: no input files
    Black Coders | Hacking, Kernel, Linux, Operating Systems, Programming
    I otworzyła studnię Czeluści,
    a dym się uniósł ze studni jak dym z wielkiego pieca,
    i od dymu zaćmiło się słońce i powietrze.
    A z dymu wyszła szarańcza na ziemię,
    i dano jej moc jaką mają ziemskie skorpiony.
    (...)
    I dano jej nakaz aby nie zabijała,
    lecz aby przez pięć miesięcy cierpieli katusze...

  5. #5

    Domyślnie

    @Ormi, też sprawdzam, mam to samo. Czego bym nie uzył: execv, execl, jakbym nie podawał parametrów ( w kodzie, z palca jako argumenty ) - nic, ten sam błąd, co u Ciebie.
    "...i stało się! Linie telefoniczne otworzyły mi bramę do świata
    upajającego jak heroina pulsująca w żyłach ćpuna! Elektronicznym
    sygnałem przekraczam wrota szukając ucieczki od codzienności,
    głupoty i niesprawiedliwości... i znajduję podobnych sobie."

  6. #6
    Zarejestrowany
    May 2008
    Postów
    534

    Domyślnie

    pewnie argumenty musza isc w oddzielnym argumencie.

  7. #7

    Domyślnie

    Tak, w execl, ale też jest ten sam błąd, że nie widzi pliku wejściowego dla g++.
    "...i stało się! Linie telefoniczne otworzyły mi bramę do świata
    upajającego jak heroina pulsująca w żyłach ćpuna! Elektronicznym
    sygnałem przekraczam wrota szukając ucieczki od codzienności,
    głupoty i niesprawiedliwości... i znajduję podobnych sobie."

  8. #8
    Zarejestrowany
    Sep 2007
    Skąd
    Różne zakątki sieci.
    Postów
    995

    Lightbulb

    http://www.digipedia.pl/man/execve.2.html
    http://www.digipedia.pl/man/exec.3.html

    Manuale się czyta drodzy koledzy!

    Kod:
    #include <unistd.h>
    char *cosik[5] ;
    int main(void) {
    	cosik[0] = "-o" ;
    	cosik[1] = "test" ;
    	cosik[2] = "./test.c" ;
    
    	execl("/usr/bin/g++", cosik[0], cosik[1], cosik[2], NULL) ;
    	return 0;
    }
    Kod:
    #include <unistd.h>
    char *cosik[5] ;
    int main(int argc, char** argv, char** envp) {
       cosik[0] = "/usr/bin/g++";
       cosik[1] = "-o";
       cosik[2] = "test"; 
       cosik[3] = "./test.cpp" ;
       cosik[4] = NULL ;
    
       execve("/usr/bin/g++", cosik, envp) ;
       return 0;
    }
    Bez zmiennych środowiskowych nie masz "PWD" co oznacza że musisz podawać pełne ścieżki.
    http://nikowek.blogspot.com/
    Zbrojne Ramię Pingwina!
    -----BEGIN GEEK CODE BLOCK-----
    Version: 3.12
    GCS d- s++:++ a--- C+++ UL+++ P L+++ E--- W++ N++ o K- w--
    O M- V- PS PE Y PGP++ t+ 5 X+ R tv- b++ DI- D-
    G+ e- h! r% y?
    ------END GEEK CODE BLOCK------

  9. #9
    Zarejestrowany
    Jul 2008
    Skąd
    Za twoimi plecami
    Postów
    351

    Domyślnie

    Zadziałało Dzięki.
    Black Coders | Hacking, Kernel, Linux, Operating Systems, Programming
    I otworzyła studnię Czeluści,
    a dym się uniósł ze studni jak dym z wielkiego pieca,
    i od dymu zaćmiło się słońce i powietrze.
    A z dymu wyszła szarańcza na ziemię,
    i dano jej moc jaką mają ziemskie skorpiony.
    (...)
    I dano jej nakaz aby nie zabijała,
    lecz aby przez pięć miesięcy cierpieli katusze...

Podobne wątki

  1. program zdalnie otwierajacy inny program:P
    By northdakota in forum C/C++
    Odpowiedzi: 9
    Autor: 02-27-2009, 23:48
  2. Łącznik: obsługa www z programu poprzez inny program(?:D)
    By marmon in forum Newbie - dla początkujących!
    Odpowiedzi: 4
    Autor: 07-21-2008, 20:18
  3. program
    By Goku1994 in forum Hacking
    Odpowiedzi: 9
    Autor: 08-05-2007, 15:51
  4. GM a złośliwy program ....
    By Danielos13 in forum Hacking
    Odpowiedzi: 7
    Autor: 05-24-2007, 19:28

Zasady Postowania

  • Nie możesz zakładać nowych tematów
  • Nie możesz pisać wiadomości
  • Nie możesz dodawać załączników
  • Nie możesz edytować swoich postów
  •  
Subskrybuj