_searchenv_s
, _wsearchenv_s
Ortam yollarını kullanarak dosya arar. 'nin _searchenv
_wsearchenv
bu sürümleri, CRT'deki Güvenlik özellikleri bölümünde açıklandığı gibi güvenlik geliştirmelerine sahiptir.
Önemli
Bu API, Windows Çalışma Zamanı yürütülen uygulamalarda kullanılamaz. Daha fazla bilgi için bkz. Evrensel Windows Platformu uygulamalarında desteklenmeyen CRT işlevleri.
Sözdizimi
errno_t _searchenv_s(
const char *filename,
const char *varname,
char *pathname,
size_t numberOfElements
);
errno_t _wsearchenv_s(
const wchar_t *filename,
const wchar_t *varname,
wchar_t *pathname,
size_t numberOfElements
);
template <size_t size>
errno_t _searchenv_s(
const char *filename,
const char *varname,
char (&pathname)[size]
); // C++ only
template <size_t size>
errno_t _wsearchenv_s(
const wchar_t *filename,
const wchar_t *varname,
wchar_t (&pathname)[size]
); // C++ only
Parametreler
filename
Aranacak dosyanın adı.
varname
Aranacak ortam.
pathname
Tam yolu depolamak için arabellek.
numberOfElements
Arabelleğin pathname
boyutu.
Dönüş değeri
Başarılı olursa sıfır; hatayla ilgili bir hata kodu.
Boş bir dizeyse filename
, dönüş değeri olur ENOENT
.
Hata koşulları
filename |
varname |
pathname |
numberOfElements |
Dönüş değeri | İçeriği pathname |
---|---|---|---|---|---|
herhangi bir | herhangi bir | NULL |
herhangi bir | EINVAL |
yok |
NULL |
herhangi bir | herhangi bir | herhangi bir | EINVAL |
değiştirilmedi |
herhangi bir | herhangi bir | herhangi bir | <= 0 | EINVAL |
değiştirilmedi |
Bu hata koşullarından herhangi biri oluşursa, Parametre doğrulama bölümünde açıklandığı gibi geçersiz parametre işleyicisi çağrılır. Yürütmenin devam etmesi için izin verilirse, bu işlevler olarak EINVAL
ayarlanır errno
ve döndürürEINVAL
.
Açıklamalar
Yordam, _searchenv_s
belirtilen etki alanındaki hedef dosyayı arar. Değişkenvarname
, , LIB
ve INCLUDE
gibi PATH
dizin yollarının listesini belirten herhangi bir ortam veya kullanıcı tanımlı değişken olabilir. Büyük _searchenv_s
/küçük harfe duyarlı olduğundan ortam varname
değişkeninin büyük/küçük harfle eşleşmesi gerekir. varname
İşlemin ortamında tanımlanan bir ortam değişkeninin adıyla eşleşmiyorsa işlev sıfır döndürür ve pathname
değişken değişmez.
Yordam önce geçerli çalışma dizinindeki dosyayı arar. Dosyayı bulamazsa, ortam değişkeni tarafından belirtilen dizinler aracılığıyla sonrakine bakar. Hedef dosya bu dizinlerden birindeyse, yeni oluşturulan yol içine pathname
kopyalanır. filename
Dosya bulunamazsa boş pathname
bir null ile sonlandırılan dize içerir.
Arabellek, pathname
oluşturulacak yol adının tam uzunluğuna uyum sağlamak için en az _MAX_PATH
karakter uzunluğunda olmalıdır. Aksi takdirde, _searchenv_s
arabellek taşması pathname
beklenmeyen davranışa neden olabilir.
_wsearchenv_s
, öğesinin _searchenv_s
geniş karakterli bir sürümüdür; için bağımsız değişkenler _wsearchenv_s
geniş karakterli dizelerdir. _wsearchenv_s
ve _searchenv_s
aksi takdirde aynı şekilde davran.
C++'ta bu işlevlerin kullanılması şablon aşırı yüklemeleriyle basitleştirilir; aşırı yüklemeler arabellek uzunluğunu otomatik olarak çıkarabilir (boyut bağımsız değişkeni belirtme gereksinimini ortadan kaldırır) ve eski, güvenli olmayan işlevleri yeni ve güvenli karşılıklarıyla otomatik olarak değiştirebilir. Daha fazla bilgi için bkz . Güvenli şablon aşırı yüklemeleri.
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 yordamı | _UNICODE ve _MBCS tanımlanmadı |
_MBCS tanımlanan |
_UNICODE tanımlanan |
---|---|---|---|
_tsearchenv_s |
_searchenv_s |
_searchenv_s |
_wsearchenv_s |
Gereksinimler
Yordam | Gerekli başlık |
---|---|
_searchenv_s |
<stdlib.h> |
_wsearchenv_s |
<stdlib.h> veya <wchar.h> |
Daha fazla uyumluluk bilgisi için bkz . Uyumluluk.
Örnek
// crt_searchenv_s.c
/* This program searches for a file in
* a directory specified by an environment variable.
*/
#include <stdlib.h>
#include <stdio.h>
int main( void )
{
char pathbuffer[_MAX_PATH];
char searchfile[] = "CL.EXE";
char envvar[] = "PATH";
errno_t err;
/* Search for file in PATH environment variable: */
err = _searchenv_s( searchfile, envvar, pathbuffer, _MAX_PATH );
if (err != 0)
{
printf("Error searching the path. Error code: %d\n", err);
}
if( *pathbuffer != '\0' )
printf( "Path for %s:\n%s\n", searchfile, pathbuffer );
else
printf( "%s not found\n", searchfile );
}
Path for CL.EXE:
C:\Program Files\Microsoft Visual Studio 2010\VC\BIN\CL.EXE
Ayrıca bkz.
Dizin denetimi
_searchenv
, _wsearchenv
getenv
, _wgetenv
_putenv
, _wputenv