freestuff.gr αρχική σελίδα
 FAQFAQ    ΑναζήτησηΑναζήτηση   Λίστα ΜελώνΛίστα Μελών   Ομάδες ΜελώνΟμάδες Μελών   <b>Εγγραφή Μέλους</b>Εγγραφή Μέλους 
 ΠροφίλΠροφίλ   Επιλογές μέλους Επιλογές   Τα bookmarks μου Τα bookmarks μου   Προσωπικά μηνύματαΠροσωπικά μηνύματα 
  διαφήμιση  

Καλώς ήρθατε στο forum μας! Για να συμμετάσχετε στις συζητήσεις θα πρέπει να είσαστε μέλος. Γίνετε μέλος τώρα!.

Πρόβλημα με fifo αρχεία


 Forum index » Δημιουργία Web Sites, Γραφικών & Προγραμματισμός » Γλώσσες Προγραμματισμού » C, C++
Moderators:  Super-Moderators, WebDev Moderators
Εισαγωγή νέου Θέματος   Απάντηση στο Θέμα Σελίδα 1 από 1 [3 Μηνύματα]      Bookmarks Tags: αρχεία Mark the topic unread :: Προηγούμενο θέμα :: Επόμενο θέμα
ΑποστολέαςΜήνυμα
dynoroad


Μέλος από: 13 Νοε 2008
Μηνύματα: 44

View users profile
ΜήνυμαΣτις: 13 Νοε 2008 16:26    Θέμα: Πρόβλημα με fifo αρχεία Απάντηση με παράθεση  Mark this post and the followings unread

Έχω τα εξής 2 παραδείγματα με τις αντίστοιχες εκφωνήσεις :

Στο επόμενο παράδειγμα η ανταλλαγή δεδομένων γίνεται από δύο
ξεχωριστές διεργασίες. Το πρόγραμμα receiver δημιουργεί έναν
επώνυμο σωλήνα και διαβάζει συνεχώς απ’ αυτόν μέχρι να παρα-
λάβει τη λέξη “exit”.

receiver.c


#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
int main() {
int fd;
char buffer[100];
unlink("FIFO");
if (mkfifo("FIFO", 0755) == -1){
fprintf(stderr,"Receiver: Coudn't create fifo.\n");
exit(2);
}
if ((fd = open("FIFO", O_RDWR)) == -1){
fprintf(stderr, "Receiver: fifo open failed.\n");
exit(1);
}
while(1){
if (read(fd, buffer, 100) == -1){
fprintf(stderr,"Receiver: fifo reading failed.\n");
exit(2);
}
printf("Received message: %s\n", buffer);
if (!strcmp(buffer,"exit")) exit(0);
}
return 0;
}




Και το άλλο παράδειγμα που είναι κ η συνέχεια αυτού αναφέρει :

Το πρόγραμμα sender καλείται με τουλάχιστον ένα όρισμα από τη
γραμμή εντολών του Λ.Σ. και ανοίγει το σωλήνα με την επιλογή
O_RDWR | O_NONBLOCK (γιατί;). Στη συνέχεια γράφει κάθε
παράμετρο στο fifo.

sender.c

#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
int main(int argc, char *argv[]){
int fd, i, n;
char buffer[100];
if (argc < 2){
fprintf(stderr, "Usage: %s message ...\n", argv[0]);
exit(1);
}
if ((fd = open("FIFO", O_RDWR | O_NONBLOCK)) == -1){
fprintf(stderr, "Sender: fifo open failed.\n");
exit(3);
}
for (i = 1; i < argc; i++){
strcpy(buffer, argv[i]);
if ((n = write(fd, buffer, 100)) == -1){
fprintf(stderr, "Sender: Write to fifo failed.\n");
exit(4);
}
}
return 0;
}



Αυτό που δεν έχωκαταλάβει είναι οτι ενώ το τρέχω στο μεν πρώτο δεν μου εμφανίζει τίποτα ενώ στο δεύτερο μου εμφανίζει το μήνημα που του προτρέπω να μου εμφανίσει... Ίσως να μην έχω καταλάβει σωστά αλλά δεν ξέρω ακόμα πως επικοινωνούν αυτά τα 2 αρχεία μεταξύ τους κ πώς μπορώ να γράψω κα΄τι στο ένα και να το εμφανίζει το άλλο...
dynoroad


Μέλος από: 13 Νοε 2008
Μηνύματα: 44

View users profile
ΜήνυμαΣτις: 14 Νοε 2008 01:12    Θέμα: Απάντηση με παράθεση  Mark this post and the followings unread

Μια μικρή βοήθεια παιδιά κ δεν μπορώ ακόμα να βγάλω άκρη.....
bxenos


Μέλος από: 18 Αυγ 2008
Μηνύματα: 53

View users profile
ΜήνυμαΣτις: 15 Νοε 2008 01:17    Θέμα: Απάντηση με παράθεση  Mark this post and the followings unread

λίγο συμάζεμα (με τα NUL) και λειτουργεί. Για το NONBLOCK διάβασε αυτό http://cr.yp.to/unix/nonblock.html και αυτό http://linux.die.net/man/3/mkfifo

κώδικας:

#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
int main() {
   int fd;
   char buffer[100];
   unlink("FIFO");
   if (mkfifo("FIFO", 0755) == -1){
      fprintf(stderr,"Receiver: Coudn't create fifo.\n");
      exit(2);
   }
   if ((fd = open("FIFO", O_RDWR)) == -1){
      fprintf(stderr, "Receiver: fifo open failed.\n");
      exit(1);
   }
   while(1){
      memset(buffer,0,sizeof(buffer));
      if (read(fd, buffer, 100) == -1){
         fprintf(stderr,"Receiver: fifo reading failed.\n");
         exit(2);
      }
      printf("Received message: %s\n", buffer);
      if (!strcmp(buffer,"exit"))
         break;
   }
   return 0;
}


κώδικας:

#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
int main(int argc, char *argv[]){
   int fd, i, n;
   char buffer[100];
   if (argc < 2){
      fprintf(stderr, "Usage: %s message ...\n", argv[0]);
   exit(1);
   }
   if ((fd = open("FIFO", O_RDWR | O_NONBLOCK)) == -1){
      fprintf(stderr, "Sender: fifo open failed.\n");
      exit(3);
   }
   for (i = 1; i < argc; i++){
      memset(buffer,0,sizeof(buffer));
      strcpy(buffer, argv[i]);
      if ((n = write(fd, buffer, 100)) == -1){
         fprintf(stderr, "Sender: Write to fifo failed.\n");
         exit(4);
      }
   }
   return 0;
}
Εμφάνιση Μηνυμάτων:   
Εισαγωγή νέου Θέματος   Απάντηση στο Θέμα Σελίδα 1 από 1 [3 Μηνύματα] Mark the topic unread :: Προηγούμενο θέμα :: Επόμενο θέμα
 Forum index » Δημιουργία Web Sites, Γραφικών & Προγραμματισμός » Γλώσσες Προγραμματισμού » C, C++
Τώρα είναι 11 Δεκ 2016 15:48 | All times are UTC + 2


Email This Page to Someone! add to Favorites

     Powered by p h p B B © 2001,2005 p h p B B Group
Για άμεση επικοινωνία με τον διαχειριστή του freestuff.gr στο email: freestuff.gr(παπάκι)gmail.com


Copyright © 1999-2013 Freestuff.gr All Rights Reserved  
Version Aegean, designed by N. Tsaganos