Client - Server: Fehlerbei open: Bad address



  • hiho ich bekomme bei meiner server-client anwendung obige fehlermeldung bei diesem code:

    size = recv(new_socket, buffer, BUF-1,0); //sollte Username sein
    
    new_file = buffer[size];
    fd = open(new_file, O_WRONLY | O_EXCL | O_CREATE, mode); //mode am beginn definiert
         if(fd == -1) {
             perror("Fehler bei open");
             return EXIT_FAILURE;
         }
    

    was stimmt da nicht er schreibt mir dann sobald ich vom client terminal den Username eingib (der dann die datei sein soll) schreibt er mir zurück Fehler bei open: Bad address

    Lg 😕



  • new_file = buffer[size];
    

    das schaut schonmal nicht richtig aus. Wie ist new_file und buffer überhaupt deklariert?

    Vielleicht willst du ja eher so etwas:

    char buffer[BUF];
    ssize_t size = recv(new_socket, buffer, BUF-1, 0);
    if(size > 0) {
      buffer[size] = '\0';
      fd = open(buffer, ...)
    }
    


  • Dieser Thread wurde von Moderator/in rüdiger aus dem Forum ANSI C in das Forum Linux/Unix verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • rüdiger schrieb:

    new_file = buffer[size];
    

    das schaut schonmal nicht richtig aus. Wie ist new_file und buffer überhaupt deklariert?

    Vielleicht willst du ja eher so etwas:

    char buffer[BUF];
    ssize_t size = recv(new_socket, buffer, BUF-1, 0);
    if(size > 0) {
      buffer[size] = '\0';
      fd = open(buffer, ...)
    }
    

    hi, danke schonmal.

    also buffer als char und new_file als const char. hab jez mal deines probiert und es funktioniert (Fast) .. aber kannst du mir mal sagen wofür das ssize_t steht? das hab ich schon öfters gesehen und keine ahnung was das für ein typ ist. size hab ich übrigens mit int deklariert.

    dann noch eine frage was bewirkt buffer [size] = '\0' .. das kommt so rüber als würde buffer "überschrieben werdn und es steht dann nichts mehr drin..



  • aber kannst du mir mal sagen wofür das ssize_t steht? das hab ich schon öfters gesehen und keine ahnung was das für ein typ ist. size hab ich übrigens mit int deklariert.

    ssize_t steht für "signed size_t" und ist irgend ein Ganzzahltyp mit Vorzeichen (könnte zB auch int sein. Aber auch was anderes, wenn int zB zu klein ist). Normalerweise nimmt man für Größenangaben immer size_t. Aber size_t ist ein vorzeichenloser Ganzzahltyp und somit könnte man keine Fehler darstellen.

    Siehe man: recv

    dann noch eine frage was bewirkt buffer [size] = '\0' .. das kommt so rüber als würde buffer "überschrieben werdn und es steht dann nichts mehr drin..

    Nein, das kümmert sich um die 0-Terminierung. http://en.wikipedia.org/wiki/C_string


Anmelden zum Antworten