2011-04-29 3 views
1

Est-il possible d'écrire directement sur le disque sans cache en C++? Actuellement J'utilise:Accès direct aux fichiers en C++?

int open(fileout, O_CREATE | O_WRONLY | O_DIRECT); 
FILE *fh = fdopen(fileout_dev, "wb"); 

Y at-il des bibliothèques de plates-formes croisées permettant de le faire?

Merci Arman.

+4

Demandez-vous de vaincre dans le système en tant que cache d'exploitation ou dans le C/C++ RTL? –

+1

Ou dans le contrôleur de disque dur? –

+0

Je voudrais écrire dans un fichier sans mettre en cache ... – Arman

Répondre

1

Si vous parlez en mémoire tampon, vous pouvez utiliser setbuf ou setvbuf

/* setbuf example */ 
#include <stdio.h> 

int main() 
{ 
    char buffer[BUFSIZ]; 
    FILE *pFile1, *pFile2; 

    pFile1=fopen ("myfile.txt","w"); 
    pFile2=fopen ("myfile2.txt","a"); 

    setbuf (pFile1 , buffer); 
    fputs ("This is sent to a buffered stream",pFile1); 
    fflush (pFile1); 

    setbuf (pFile2 , NULL); 
    fputs ("This is sent to an unbuffered stream",pFile2); 

    fclose (pFile1); 
    fclose (pFile2); 

    return 0; 
} 


/* setvbuf example */ 
#include <stdio.h> 

int main() 
{ 
    FILE *pFile; 

    pFile=fopen ("myfile.txt","w"); 

    // _IONBF disables buffering 
    setvbuf (pFile , NULL , _IONBF, 0); 

    // File operations here 

    fclose (pFile); 

    return 0; 
} 
+0

Merci, est-ce la même chose que O_DIRECT? – Arman

+0

@Arman: "est-ce la même chose que O_DIRECT?" No. –

+0

@Arman: BTW O_DIRECT ne garantit pas que vous n'avez pas de cache. Il ne demande qu'un noyau de type Unix pour ne pas mettre en cache IO à travers cette FD. Le matériel lui-même peut être mis en cache en interne. –