ΠΛΗΡΟΦΟΡΙΕΣ: FILE_FLAG_WRITE_THROUGH και FILE_FLAG_NO_BUFFERING

Μεταφράσεις άρθρων Μεταφράσεις άρθρων
Αναγν. άρθρου: 99794 - Δείτε τα προϊόντα στα οποία αναφέρεται το συγκεκριμένο άρθρο.
Ανάπτυξη όλων | Σύμπτυξη όλων

Περίληψη

Η σημαία FILE_FLAG_WRITE_THROUGH για η δημιουργία αρχείων() αναγκάζει όλες οι εγγραφές που έχουν πραγματοποιηθεί σε χειρίζονται να αναγράφονται απευθείας με το αρχείο, χωρίς να γίνεται σε buffer. Το δεδομένα αποθηκεύονται προσωρινά (αποθηκευμένο στη μνήμη cache του δίσκου). Ωστόσο, εξακολουθεί να είναι γραμμένη απευθείας με το αρχείο. Η μέθοδος αυτή επιτρέπει σε μια λειτουργία ανάγνωσης σε αυτά τα δεδομένα σε αντί να πληρούν την αίτηση ανάγνωσης από τα προσωρινά αποθηκευμένα δεδομένα (εάν είναι ακόμα εκεί), Για να κάνετε ένα αρχείο για ανάγνωση για να λάβετε τα δεδομένα. Η κλήση εγγραφής δεν επανέρχεται, έως ότου τα δεδομένα εγγράφονται στο αρχείο. Αυτό ισχύει για απομακρυσμένη εγγραφών καθώς--το πρόγραμμα ανακατεύθυνσης δικτύου μεταβιβάζει τη σημαία FILE_FLAG_WRITE_THROUGH στο διακομιστή, έτσι ώστε να γνωρίζει ο διακομιστής δεν πρέπει να ικανοποιήσει την αίτηση εγγραφής μέχρι τα δεδομένα εγγράφονται στο αρχείο.

Το FILE_FLAG_NO_BUFFERING λαμβάνει αυτή έννοια ένα βήμα περαιτέρω και Καταργεί όλες τις buffering cache ανάγνωσης αρχείων και δίσκου προσωρινής αποθήκευσης καθώς και, έτσι ώστε να όλες τις αναγνώσεις είναι βέβαιο ότι προέρχονται από το αρχείο και όχι από οποιοδήποτε σύστημα buffer ή disk cache. Αναγνώσεις στο δίσκο κατά τη χρήση του FILE_FLAG_NO_BUFFERING, και Εγγράφει πρέπει να γίνει στα όρια του τομέα και διευθύνσεων buffer πρέπει να είναι στοίχιση στα όρια του τομέα δίσκου στη μνήμη.

Οι περιορισμοί αυτοί είναι απαραίτητες επειδή το buffer που μεταβιβάζετε το ανάγνωση ή εγγραφή API χρησιμοποιείται απευθείας για εισόδου/εξόδου σε επίπεδο συσκευής. στην οποία επίπεδο, τις διευθύνσεις buffer και μεγέθη τομέα πρέπει να πληρούν όλους τους επεξεργαστές και μέσων στοίχιση περιορισμών του υλικού λειτουργούν στον.

Περισσότερες πληροφορίες

Το CDFS 95 Windows (σύστημα αρχείων CD-ROM) δεν υποστηρίζει την Η σημαία FILE_FLAG_NO_BUFFERING για η δημιουργία αρχείων(). Ενώ μια FSD 95 Windows, τέτοια ως VFAT, ενδέχεται να εφαρμόζουν, FILE_FLAG_NO_BUFFERING δεν είναι απαραίτητη μια σημαία για σύστημα αρχείων προγραμμάτων οδήγησης και δεν υποστηρίζεται από CDFS.

Αυτό το τμήμα κώδικα δείχνει τον τρόπο τομέα Στοίχιση δεδομένων στο buffer και Διαβιβάστε η δημιουργία αρχείων():
  char buf[2 * SECTOR_SIZE - 1], *p;

  p = (char *) ((DWORD) (buf + SECTOR_SIZE - 1) & ~(SECTOR_SIZE - 1));
  h = CreateFile(argv[1], GENERIC_READ | GENERIC_WRITE,
      FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, CREATE_ALWAYS,
      FILE_ATTRIBUTE_NORMAL | FILE_FLAG_NO_BUFFERING, NULL);
  WriteFile(h, p, SECTOR_SIZE, &dwWritten, NULL);

				
Ο δείκτης p είναι στοιχισμένο τομέα και σημεία από το buffer.

Εάν έχετε μια κατάσταση όπου θέλετε να εκκενώσει όλα τα ανοιχτά αρχεία στον το τρέχουσα μονάδα λογικού δίσκου, αυτό μπορεί να γίνει:
   hFile = CreateFile("\\\\.\\c:", ....);
   FlushFileBuffers(hFile);
				
Αυτή η μέθοδος προκαλεί όλα τα δεδομένα εγγραφής buffered για όλα τα ανοιχτά αρχεία στη μονάδα δίσκου C: διαμέρισμα πρέπει να εκκενώνεται και εγγράφονται στο δίσκο. Σημειώστε ότι κάθε buffering γίνεται με οτιδήποτε εκτός από το σύστημα δεν επηρεάζεται από αυτό εκκαθάρισης. οποιαδήποτε πιθανές αρχείο αποθήκευσης στο buffer που κάνει το c χρόνου εκτέλεσης σε αρχεία ανοίγουν με c Ρουτίνες χρόνου εκτέλεσης δεν επηρεάζεται.

Κατά το άνοιγμα ενός απομακρυσμένου αρχείου μέσω δικτύου, ο διακομιστής αποθηκεύει πάντα και αγνοεί καμία προσωρινής αποθήκευσης σε buffer σημαία έχει καθοριστεί από το πρόγραμμα-πελάτη. Αυτό οφείλεται στη σχεδίαση. Το πρόγραμμα ανακατεύθυνσης και ο διακομιστής δεν μπορεί να υλοποιήσει σωστά το πλήρες σημασιολογία FILE_FLAG_NO_BUFFERING μέσω του δικτύου. Ειδικότερα, η απαίτηση για τομέας μεγέθους, στοίχιση τομέα εισόδου/εξόδου δεν μπορεί να τηρηθεί. Επομένως, όταν ένα Win32 - ζητά εφαρμογών που βασίζονται σε FILE_FLAG_NO_BUFFERING, το πρόγραμμα ανακατεύθυνσης και διακομιστής αντιμετωπίζουν αυτό ως αίτηση για FILE_FLAG_WRITE_THROUGH. Το αρχείο δεν είναι προσωρινή αποθήκευση στον υπολογιστή-πελάτη, εγγράφει μεταβείτε απευθείας στο διακομιστή και στο δίσκο ο διακομιστής και τα μεγέθη για ανάγνωση/εγγραφή στο δίκτυο είναι ακριβώς τι το εφαρμογή ζητά. Ωστόσο, το αρχείο αποθηκεύεται προσωρινά στο διακομιστή.

Δεν προσωρινής αποθήκευσης του υπολογιστή-πελάτη μπορεί να έχει διαφορετικό αποτέλεσμα, ανάλογα με τον τύπο της εισόδου/εξόδου. Εξάλειψη της προσωρινής ή ανάγνωση εμπρός, αλλά μπορεί να μειώσει επίσης το μέγεθος του μεταδίδει και λαμβάνει. Γενικά, για την ακολουθία εισόδου/εξόδου, είναι ένα καλό θα ήταν να προσωρινής αποθήκευσης του υπολογιστή-πελάτη. Μικρή, τυχαία πρόσβαση εισόδου/εξόδου, είναι συχνά Οι καλύτερες δεν στην προσωρινή μνήμη cache.

Ιδιότητες

Αναγν. άρθρου: 99794 - Τελευταία αναθεώρηση: Πέμπτη, 27 Ιανουαρίου 2011 - Αναθεώρηση: 2.0
Οι πληροφορίες σε αυτό το άρθρο ισχύουν για:
  • Microsoft Win32 Application Programming Interface στις ακόλουθες πλατφόρμες
    • Microsoft Windows 98 Standard Edition
    • Microsoft Windows Millennium Edition
Λέξεις-κλειδιά: 
kbapi kbfileio kbinfo kbkernbase kbmt KB99794 KbMtel
Μηχανικά μεταφρασμένο
ΣΗΜΑΝΤΙΚΟ: Αυτό το άρθρο είναι προϊόν λογισμικού μηχανικής μετάφρασης της Microsoft και όχι ανθρώπινης μετάφρασης. Η Microsoft σάς προσφέρει άρθρα που είναι προϊόντα ανθρώπινης αλλά και μηχανικής μετάφρασης έτσι ώστε να έχετε πρόσβαση σε όλα τα άρθρα της Γνωσιακής Βάσης μας στη δική σας γλώσσα. Ωστόσο, ένα άρθρο που έχει προκύψει από μηχανική μετάφραση δεν είναι πάντα άριστης ποιότητας. Ενδέχεται να περιέχει λεξιλογικά, συντακτικά ή γραμματικά λάθη, όπως ακριβώς τα λάθη που θα έκανε ένας μη φυσικός ομιλητής επιχειρώντας να μιλήσει τη γλώσσα σας. Η Microsoft δεν φέρει καμία ευθύνη για τυχόν ανακρίβειες, σφάλματα ή ζημίες που προκύψουν λόγω τυχόν παρερμηνειών στη μετάφραση του περιεχομένου ή χρήσης του από τους πελάτες της. Επίσης, η Microsoft πραγματοποιεί συχνά ενημερώσεις στο λογισμικό μηχανικής μετάφρασης.
Η αγγλική έκδοση αυτού του άρθρου είναι η ακόλουθη:99794

Αποστολή σχολίων

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com