_fsopen, _wfsopen

Dosya paylaşımıyla bir akış açar.

Sözdizimi

FILE *_fsopen(
   const char *filename,
   const char *mode,
   int shflag
);
FILE *_wfsopen(
   const wchar_t *filename,
   const wchar_t *mode,
   int shflag
);

Parametreler

filename
Açılacak dosyanın adı.

mode
İzin verilen erişim türü.

shflag
İzin verilen paylaşım türü.

Dönüş değeri

Bu işlevlerin her biri akışa bir işaretçi döndürür. Null işaretçi değeri bir hatayı gösterir. Veya ise mode veya boş bir dizeyse NULL filename, bu işlevler Parametre doğrulama bölümünde açıklandığı gibi geçersiz parametre işleyicisini çağırır. Yürütmenin devam etmesi için izin verilirse, bu işlevler döndürülerek NULL olarak EINVALayarlanırerrno.

Bunlar ve diğer hata kodları hakkında daha fazla bilgi için bkz. errno, _doserrno, _sys_errlistve _sys_nerr.

Açıklamalar

_fsopen işlevi tarafından filename belirtilen dosyayı akış olarak açar ve mod ve bağımsız değişkenler tarafından tanımlandığı gibi dosyayı sonraki paylaşılan okuma veya shflag yazma işlemlerine hazırlar. _wfsopen , öğesinin _fsopengeniş karakterli bir sürümüdür; filename ve mode bağımsız değişkenleri _wfsopen geniş karakterli dizelerdir. _wfsopen ve _fsopen aksi takdirde aynı şekilde davran.

Karakter dizesi mode , aşağıdaki tabloda gösterildiği gibi dosya için istenen erişim türünü belirtir.

Süre Tanım
"r" Okuma için açılır. Dosya yoksa veya bulunamıyorsa, _fsopen çağrı başarısız olur.
"w" Yazmak için boş bir dosya açar. Verilen dosya varsa, içeriği yok edilir.
"a" Dosyanın sonuna yazmak için açılır (ekleme); yoksa önce dosyayı oluşturur.
"r+" Hem okuma hem de yazma için açılır. (Dosya mevcut olmalıdır.)
"w+" Hem okuma hem de yazma için boş bir dosya açar. Verilen dosya varsa, içeriği yok edilir.
"a+" Okuma ve ekleme için açılır; yoksa önce dosyayı oluşturur.

Mevcut dosyaları yok edebildiği için "w" ve "w+" türlerini dikkatli kullanın.

Bir dosya "" veya "aa+" erişim türüyle açıldığında, tüm yazma işlemleri dosyanın sonunda gerçekleşir. Dosya işaretçisi veya rewindkullanılarak fseek yeniden konumlandırılabilir, ancak herhangi bir yazma işlemi gerçekleştirilmeden önce her zaman dosyanın sonuna geri taşınır. Bu nedenle, mevcut verilerin üzerine yazılamaz. "", "w+r+" veya "a+" erişim türü belirtildiğinde, hem okuma hem de yazma işlemine izin verilir (dosyanın güncelleştirme için açık olduğu söylenir). Ancak, okuma ve yazma arasında geçiş yaparken, bir araya gelen fsetpos, fseekveya rewind işlemi olmalıdır. İsterseniz, veya fseek işlemi için fsetpos geçerli konum belirtilebilir. Yukarıdaki değerlere ek olarak, yeni satırlar ve dosya yönetimi için çeviri modunu belirtmek üzere aşağıdaki karakterlerden biri eklenebilir mode .

Süre Tanım
t Dosyayı metin (çevrilmiş) modunda açar. Bu modda, satır başı besleme (CR-LF) birleşimleri girişte tek satırlı akışlara (LF) çevrilir ve LF karakterleri çıkıştaki CR-LF birleşimlerine çevrilir. Ayrıca, CTRL+Z, girişte dosya sonu karakteri olarak yorumlanır. Okuma veya okuma/yazma için açılan dosyalarda, _fsopen dosyanın sonunda bir CTRL+Z olup olmadığını denetler ve mümkünse kaldırır. CTRL+Z ile biten bir dosya içinde ve kullanmak dosyanın sonuna doğru düzgün davranmamasına neden fseek olabileceğinden kaldırılır.fseek ftell
b Bir dosyayı ikili (çevrilmemiş) modda açar; yukarıdaki çeviriler gizleniyor.
D Son dosya işaretçisi kapatıldığında silinen geçici bir dosya belirtir.
R Önbelleğe almanın diskten rastgele erişim için iyileştirildiğini ancak bununla sınırlı olmadığını belirtir.
S Önbelleğe almanın diskten sıralı erişim için iyileştirildiğini ancak bununla sınırlı olmadığını belirtir.
T Bellek baskısı gerektirmediği sürece diske yazılmamış bir dosya belirtir.

veya b içinde modeverilmemişset, çeviri modu varsayılan mod değişkeni _fmodetarafından tanımlanır. veya b bağımsız değişkenine ön ekliyse t işlev başarısız olur ve döndürürNULL. Metin ve ikili modlar hakkında bir tartışma için bkz . Metin ve ikili mod dosyası G/Ç.

ve ile ilgili T D:

  • T bellek baskısı gerektirmediği sürece dosyayı diske yazmaktan kaçınıyor. Daha fazla bilgi için Dosya özniteliği sabitleri bölümüne bakın FILE_ATTRIBUTE_TEMPORARY ve ayrıca bu blog gönderisi Yalnızca geçicidir.
  • D diske yazılan normal bir dosyayı belirtir. Aradaki fark, kapatıldığında otomatik olarak silinmesidir. Her iki semantiği de almak için birleştirebilirsiniz TD .

_fsopen ve _wfsopen Microsoft'a özgü varyantlarıdır fopen. BUNLAR ANSI standardının bir parçası değildir. Daha taşınabilir ve güvenli bir işlev için, dosya paylaşımına ihtiyacınız yoksa veya seçeneğini göz önünde bulundurun_wfopen_s.fopen_s

bağımsız değişkeni shflag , içinde Share.htanımlanan aşağıdaki bildirim sabitlerinden birini içeren sabit bir ifadedir.

Süre Tanım
_SH_DENYNO Okuma ve yazma erişimine izin verir.
_SH_DENYRD Dosyaya okuma erişimini reddeder.
_SH_DENYRW Dosyaya okuma ve yazma erişimini reddeder.
_SH_DENYWR Dosyaya yazma erişimini reddeder.

Varsayılan olarak, bu işlevin genel durumunun kapsamı uygulama olarak belirlenmiştir. Bu davranışı değiştirmek için bkz. CRT'de Genel durum.

Genel metin yordamı eşlemeleri

Tchar.h olağan _UNICODE ve _MBCS tanımlanmadı _MBCS tanımlanan _UNICODE tanımlanan
_tfsopen _fsopen _fsopen _wfsopen

Gereksinimler

İşlev Gerekli başlık İsteğe bağlı üst bilgiler
_fsopen <stdio.h> <share.h>

Parametre için bildirim sabiti için shflag .
_wfsopen <stdio.h> veya <wchar.h> <share.h>

Parametre için bildirim sabiti için shflag .

Örnek

// crt_fsopen.c

#include <stdio.h>
#include <stdlib.h>
#include <share.h>

int main( void )
{
   FILE *stream;

   // Open output file for writing. Using _fsopen allows us to
   // ensure that no one else writes to the file while we are
   // writing to it.
    //
   if( (stream = _fsopen( "outfile", "wt", _SH_DENYWR )) != NULL )
   {
      fprintf( stream, "No one else in the network can write "
                       "to this file until we are done.\n" );
      fclose( stream );
   }
   // Now others can write to the file while we read it.
   system( "type outfile" );
}
No one else in the network can write to this file until we are done.

Ayrıca bkz.

Akış G/Ç
fclose, _fcloseall
_fdopen, _wfdopen
ferror
_fileno
fopen, _wfopen
freopen, _wfreopen
_open, _wopen
_setmode
_sopen, _wsopen