1B querydecode

  • Hallo!
    Ich habe ein ganz großes Problem und nicht mehr viel Zeit!!
    Bei meinem Beispiel muss ich als Argument folgendes einlesen:
    <PROT+LOCATION>?<QUERYSTRING>
    QUERYSTRING: VAR1=VAL1&VAR2=VAL2& ... &VARn=VALn


    Mein Problem nun ist es, dass nur bis zum 1. Erscheinen von "&" eingelesen wird und ins File geschrieben wird.
    Auch wenn ich ganz normal das Argument wieder ausgeben will auf stdout tut er das nur bis zum &:
    Folgendes wird dann angezeigt:
    ------- ./test duich?hallo=fu&du
    [1] 29089
    14
    duich?hallo=fu
    40 .
    [1]+ Done ./test duich?hallo=fu


    oder bei:
    -------- ./test duich?hallo=fu&ich=ihr
    [1] 29129
    [y0425677@apps1 Test]$ 14
    duich?hallo=fu





    macht er überhaupt nicht mehr weiter


    Was ist los? Kann mir bitte jemand helfen?

  • It's a feature, not a bug. ;)


    Konkret: Wenn du in der Shell etwas eingibst und das Zeichen "&" dahinterstellst, dann wird der entsprechende Prozess im Hintergrund gestartet, d.h. die Shell wird durch diesen Prozess nicht blockiert. Wenn du jetzt

    Code
    1. a&b

    eingibst, dann heißt das: Starte a im Hintergrund, dann starte b im Vordergrund.


    Wenn du nun zum Beispiel "a&b" ausgeben willst und du gibst

    Code
    1. echo a&b

    ein, dann wirst du nicht das gewünschte Ergebnis erzielen. Möglichkeiten:

    • & escapen:
      Code
      1. echo a\&b


    • Den String in Anführungszeichen setzen:
      Code
      1. echo "a&b"



  • Aso! Danke!
    Aber macht der Tutor das dann auch bei der Abgabe?

  • Nächstes Problem:


    Ich soll mit mkstemp eine temporäre Datei erstellen und diese Funktion gibt mir int zurück (und zwar den file descriptor). Wie komme ich nun zum Filenamen?


    Aus der Manpage:


    Code
    1. The last six characters of template must be XXXXXX and these
    2. [B]are replaced with a string that makes the filename unique[/B]. The file is
    3. then created with mode read/write and permissions 0666 (glibc 2.0.6 and
    4. earlier), 0600 (glibc 2.0.7 and later). [B]Since it will be modified,
    5. template must not be a string constant, but should be declared as a
    6. character array.[/B]

    Nach dem Aufruf enthält template (=der Parameter von mkstemp, der ein char* sein sollte und keine string-Konstante) also den vergebenen Dateinamen.

  • Aus der Manpage:


    Code
    1. The last six characters of template must be XXXXXX and these
    2. [B]are replaced with a string that makes the filename unique[/B]. The file is
    3. then created with mode read/write and permissions 0666 (glibc 2.0.6 and
    4. earlier), 0600 (glibc 2.0.7 and later). [B]Since it will be modified,
    5. template must not be a string constant, but should be declared as a
    6. character array.[/B]

    Nach dem Aufruf enthält template (=der Parameter von mkstemp, der ein char* sein sollte und keine string-Konstante) also den vergebenen Dateinamen.


    Danke! So nah war die Lösung!

  • Was heisst "Teilen Sie einzelne VAR1=VAL1 Paare auf und schreiben diese in temporäre Datei "?


    Sollte diese temporäre Datei so aussehen:
    VAR1=VAL1VAR2=VAL2VAR3=VAL3....VARn=VALn


    ?