Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

Γεια σας,είμαι κάπως αρχάρια με τη χρήση named pipes Δουλεύω ενα πρόγραμμα σε linux και σε γλώσσα C.Το θέμα μου είναι το εξής:
Ο server "ακουει" σε γράψιμο του client έτσι:
    do
        {
          memset(buf,0,sizeof(buf));
            if ((num = read(fd, buf, sizeof(buf))) < 0)
                perror("child - read");
            else
            {
                   buf[num] = '\0';
                printf("child - read %d bytes: %s\n", num, buf);
                printf("%d\n", strcmp(buf,"OK"));
                if(!strcmp(buf,"OK")) printf("ook2 \n");
                //if(buf=="OK") printf("ook2 \n");

            }

        } while (num > 0);

και ο client γράφει στο namedpipe:
    while (fgets(buf, sizeof(buf), stdin), !feof(stdin))
        {
            if ((num = write(fd, buf, strlen(buf))) < 0)
                perror("parent - write");
            else
                printf("parent - wrote %d bytes\n", num);
        }


*εχει προηγηθεί δημιουργία και  άνοιγμα namedpipe.
To πρόβλημα είναι οτι θέλω οταν ο σερβερ διαβάσει συγκεκριμένες λέξεις (πχ "ΟΚ") να κανει μία συγκεκριμένη λειτουργία.Για αυτό κάνω if(!strcmp(buf,"OK")) {.....}. Παρ'όλα αυτά, η strcmp δεν βγάζει τα αναμενόμενα αποτελέσματα (στη συγκεκριμένη περίπτωση γυρίζει 10)---αν και έχω ελέγξει την τιμή του buf που είναι "ΟΚ". Καμία ιδέα για το τι μπορεί να φταίει?θα βοηθούσε πολύ!Ευχαριστώ.
 

Δημοσ.

Υποψιάζομαι ότι η υλοποίηση της strcmp που έχεις επιστρέφει την πρώτη αριθμητική διαφορά chars που είναι διάφορη του μηδενός ανάμεσα στα δυο strings που συγκρίνει. Αυτό το λέω επειδή 10 είναι ο ASCII κωδικός του newline, οπότε κάνοντας την υπόθεση πως το ένα σου string είναι "OK" και το άλλο "OK\n":

  1. Εξηγείται γιατί η strcmp θα επέστρεφε 10
  2. Είναι πιθανό να βάλεις \n στο τέλος της εισόδου χωρίς να το καταλάβεις αν δεν προσέχεις
  3. Δε φαίνεται με γυμνό μάτι το \n ("έχεις ελέγξει") αν δεν είσαι πολύ παρατηρητικός

My money λοιπόν ότι με τη fgets ή ο,τι άλλο κάνεις διαβάζεις και ένα newline μαζί.

 

Σφάλμα σου ότι πριν από όλα τα υπόλοιπα δεν έλεγξες το num να δεις ότι είναι 3 και αμέσως να πάρεις σωστή γραμμή για debugging.

Δημοσ.

όντως αυτό ήταν!βλακεία μου που δεν έλεγξα το μέγεθος του buf!παιδευόμουν απο το πρωί σχεδόν!
σας ευχαριστώ πολύ!

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...