perror in eine Integer oder Stringvaribel übergeben?



  • Hallo, ich programmiere in Linux mit g++ und code::blocks, der folgende c++ Code, möchte ich gerne erweitern, aber ich weiss nicht wie >>>

    #include <errno.h> // Die Header sind das Grundgerüst
    #include <iostream> 
    #include <fstream>
    #include <cstdio>
    #include <cstdlib>
    #include <cstring>
    #include <ctime>
    #include <sstream>
    #include <unistd.h> 
    #include <stdio.h> // einige c++/c Header werden gebraucht oder auch nicht 
    
    using namespace std;
    
    void excel1();
    
    int main(int argc, char * argv [] )
    {
        excel1();
        excel2();
    }
    
    void excel1()
    {
        printf("\nexcel1\n");
        if ( execl("/bin/l", "-r", "-t", "-l", NULL) == -1)
            perror("Fehler in excel1()" ); // <<< Dieses hat mein Interesse
    
            cout << "Text1" << endl;
    }
    

    Das Codeschnipsel von oben >>>
    [code="cpp"]if ( execl("/bin/l", "-r", "-t", "-l", NULL) == -1)
    perror("Fehler in excel1()" );[c][/c][/code]
    Wie kann ich perror in eine Integer oder Stringvaribel übergeben?
    P.S I= perror funktioniert nicht.



  • #include <unistd.h>
    #include <cstdio>
    #include <iostream>
    
    void excel1();
    
    int main()
    {
        excel1();
    }
    
    void excel1()
    {
        std::printf("excel1\n");
        if ( execl("/bin/l", "-r", "-t", "-l", NULL) == -1)
            perror("Fehler in excel1()");
    
    	std::cout << "Text1\n";
    }
    

    So. Was willst du?



  • Jetzt mal ins blaue geraten, was Du wissen willst:

    man perror schrieb:

    SEE ALSO strerror(3)



  • Warum willst Du perror eine Integer- oder Stringvariable übergeben? Was soll perror damit machen? Was willst Du erreichen?

    Und gewöhn Dir ganz schnell mal wieder ab, erst mal alles mögliche zu includieren. Includiere nur die Header, die Du wirklich brauchst.



  • tntnet

    Ich will

    perror
    

    deswegen an eine oder mehrere Variablen übergeben, weil ich will die Daten verarbeiten.



  • Neee, du verstehst falsch. Was willst du wirklich?



  • Mister C++ schrieb:

    tntnet

    Ich will

    perror
    

    deswegen an eine oder mehrere Variablen übergeben, weil ich will die Daten verarbeiten.

    Und das soll man verstehen 🙄 😕 . Was willst Du wohin übergeben und was willst Du damit erreichen?



  • SG1

    man perror schrieb:
    SEE ALSO strerror(3)

    Ich werde mich mal darum kümmern.



  • perror ist wie folgt definiert:

    #include <stdio.h>
    
    void perror(const char *s);
    

    End of story.

    Das bedeutet, du kannst perror nur eine 0-terminierte Zeichenkette (aka C-String) übergeben. Wenn du die Ausgabe von perror mit extra Information bereichen willst, dann musst du im Voraus eine Zeichenkette selber basteln, die diese Info enthält. Zum Beispiel

    #include <stdio.h>
    
    ...
    
    char msg[1024];
    
    sprintf(msg, "Error on line %d, number of errors: %d\n", lineno, errcount);
    perror(msg);
    

    Wenn du sowas machen willst, dann ist es weniger umständlich man: strerror zu nehmen (wie bereits erwähnt)

    #include <errno.h>
    #include <string.h>
    #include <stdio.h>
    
    ...
    
    fprintf(stderr, "Error on line %d, number of errors: %d: %s\n", lineno, errcount, strerror(errno));
    

    In beiden Fällen wäre die Ausgabe gleich.



  • Danke supertux, auch für dein Listing.
    Sollte es keinen Widerspruch geben, ist von meinem Standpunkt das hiesige Thema/Thread gelöst.


Anmelden zum Antworten