2012-09-03 26 views
8

Burada C düzleminde küçük bir program yazıyorum. İhtiyacım olan şey doğrudan belleğin içine bir dosya oluşturmaktır (sabit diskte bulunmaz) Şu anda dosyaya yazmak için fopen("filename.txt,"wb") kullanabilirim.C - bellekte dosya oluştur

Linux'da fmemopen()'u kullanabileceğinizi biliyorum. Win32 için benzer bir çözüm var mı?

+1

Neden? Oluşturulduktan sonra dosyadan okumak için düzenli 'FILE *' I/O işlevleri 'fread()' işlevini kullanabileceğini bekler/gerekir mi? – unwind

+1

Ne çözmeye çalışıyorsunuz? Son hedefin nedir? – jweyrich

cevap

0

Bu, bir dosya oluşturduğundan fopen kullanmaz.

Dosyayı bellekte oluşturmak için dosyayı oluşturmanız ve uygun gördüğünüz şekilde saklamanız gerekir.

Bazı veri türü dizisini oluşturmanız gerekir. Char * kullanırdım ama imformasyonu kodlamak istediğin her şeyi kullanabilirsin. Ardından diziye bilgi ekleyerek dosyayı okuyabilir ve yazabilirsiniz.

+0

Cevabınız için teşekkürler, tek sorunum, * FILE kullanan harici bir program kullanmam gerektiği söylendi, bu yüzden kullanmak zorunda kaldım. İkinci istek diske herhangi bir şey yazmamaktı, bellek, bellek eşlemesi vb. Sanal dosya gibi bir tür geçici çözüm arıyordum. –

+0

@J Nash: DOSYA işaretçileri tamamen uygulanmış ve derleyiciler arasında taşınabilir değil. Eğer harici programın kendisinde FILE içsel olarak programınızı nasıl etkileyeceğini göremiyorum. – Clifford

+0

Üzgünüm, tam olarak açıklama yapmadım, mevcut programa şifreleme ekliyorum, ki bu oldukça karmaşık. Bu disk üzerinde bulunan giriş dosyalarını okur. Şimdilik bu dosyaları şifreliyorum ve programımın içinde yeniden şifresini çözüyorum - ancak güvenli çözüm olmayan geçici "açık şifrelenmemiş" dosyalar yaratır. Teşekkürler –

0

MapViewOfFile ile yakın bir şey elde edebilirsiniz. Bunun için kullanması gereken Win32 API şunlardır: bir kez yapılır

CreateFile(...)

CreateFileMapping(...)

MapViewOfFile(...) unmap ve yakın dosya eşlemesi unutmayın.

+0

düz C konsol uygulaması için kullanılabilir fonksiyonlar var mı? –

+0

Win32, bir düz c API'sidir. Windows SDK'ya gereksinim duyuyor ve bağlandığım MSDN sayfalarında belirtilen doğru başlık dosyalarını eklediğinizden emin olun. – Indy9000

+0

Bir dosyayı sanal belleğe eşlemek için 'CreateFile 'dosyasına ihtiyacınız yoktur,' INVALID_HANDLE_VALUE' adlı bir dosya tanıtıcısı kullanın (-1) 'CreateFileMapping' içinde. – cdarke

0

Bu işlevsellik, Windows'ta özünde desteklenmez. Ancak, bir dosya yerine bir bellek arabelleğine erişmek için yüksek seviyeli stdio işlevlerini yeniden yazabilir veya yalnızca stdio benzeri işlevleri uygulayabilirsiniz. Ya da bir RAM disk uygulayabilirsiniz, ancak RAM disk sürücüsünün kendisini kurmak "diskinize yazmayın" kuralına uymayabilir.