Αυτήν τη στιγμή είστε εκτός σύνδεσης, σε αναμονή για επανασύνδεση στο Internet

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

ΣΗΜΑΝΤΙΚΟ: Αυτό το άρθρο είναι προϊόν λογισμικού μηχανικής μετάφρασης της Microsoft και όχι ανθρώπινης μετάφρασης. Η Microsoft σάς προσφέρει άρθρα που είναι προϊόντα ανθρώπινης αλλά και μηχανικής μετάφρασης έτσι ώστε να έχετε πρόσβαση σε όλα τα άρθρα της Γνωσιακής Βάσης μας στη δική σας γλώσσα. Ωστόσο, ένα άρθρο που έχει προκύψει από μηχανική μετάφραση δεν είναι πάντα άριστης ποιότητας. Ενδέχεται να περιέχει λεξιλογικά, συντακτικά ή γραμματικά λάθη, όπως ακριβώς τα λάθη που θα έκανε ένας μη φυσικός ομιλητής επιχειρώντας να μιλήσει τη γλώσσα σας. Η Microsoft δεν φέρει καμία ευθύνη για τυχόν ανακρίβειες, σφάλματα ή ζημίες που προκύψουν λόγω τυχόν παρερμηνειών στη μετάφραση του περιεχομένου ή χρήσης του από τους πελάτες της. Επίσης, η Microsoft πραγματοποιεί συχνά ενημερώσεις στο λογισμικό μηχανικής μετάφρασης.

Η αγγλική έκδοση αυτού του άρθρου είναι η ακόλουθη: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 - Τελευταία αναθεώρηση: 01/27/2011 17:58:00 - Αναθεώρηση: 2.0

Microsoft Win32 Application Programming Interface

  • kbapi kbfileio kbinfo kbkernbase kbmt KB99794 KbMtel
Σχόλια