_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 EINVAL
ayarlanırerrno
.
Bunlar ve diğer hata kodları hakkında daha fazla bilgi için bkz. errno
, _doserrno
, _sys_errlist
ve _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 _fsopen
geniş 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 "a
a+
" erişim türüyle açıldığında, tüm yazma işlemleri dosyanın sonunda gerçekleşir. Dosya işaretçisi veya rewind
kullanı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
, fseek
veya 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 mode
verilmemişset
, çeviri modu varsayılan mod değişkeni _fmode
tarafı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ınFILE_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ştirebilirsinizTD
.
_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.h
tanı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