Win32 Equivalents for C Run-Time Functions


Many of the C Run-time functions have direct equivalents in the Win32 application programming interface (API). This article lists the C Run-time functions by category with their Win32 equivalents or the word "none" if no equivalent exists.

More Information

NOTE: the functions that are followed by an asterisk (*) are part of the 16-bit C Run-time only. Functions that are unique to the 32-bit C Run-time are listed separately in the last section. All other functions are common to both C Run-times.

Buffer Manipulation

_memccpy none
memchr none
memcmp none
memcpy CopyMemory
_memicmp none
memmove MoveMemory
memset FillMemory, ZeroMemory
_swab none

Character Classification

isalnum IsCharAlphaNumeric
isalpha IsCharAlpha, GetStringTypeW (Unicode)
__isascii none
iscntrl none, GetStringTypeW (Unicode)
__iscsym none
__iscsymf none
isdigit none, GetStringTypeW (Unicode)
isgraph none
islower IsCharLower, GetStringTypeW (Unicode)
isprint none
ispunct none, GetStringTypeW (Unicode)
isspace none, GetStringTypeW (Unicode)
isupper IsCharUpper, GetStringTypeW (Unicode)
isxdigit none, GetStringTypeW (Unicode)
__toascii none
tolower CharLower
_tolower none
toupper CharUpper
_toupper none

Directory Control

_chdir SetCurrentDirectory
_chdrive SetCurrentDirectory
_getcwd GetCurrentDirectory
_getdrive GetCurrentDirectory
_mkdir CreateDirectory
_rmdir RemoveDirectory
_searchenv SearchPath

File Handling

_access none
_chmod SetFileAttributes
_chsize SetEndOfFile
_filelength GetFileSize
_fstat See Note 5
_fullpath GetFullPathName
_get_osfhandle none
_isatty GetFileType
_locking LockFileEx
_makepath none
_mktemp GetTempFileName
_open_osfhandle none
remove DeleteFile
rename MoveFile
_setmode none
_splitpath none
_stat none
_umask none
_unlink DeleteFile

Creating Text Output Routines

_displaycursor* SetConsoleCursorInfo
_gettextcolor* GetConsoleScreenBufferInfo
_gettextcursor* GetConsoleCursorInfo
_gettextposition* GetConsoleScreenBufferInfo
_gettextwindow* GetConsoleWindowInfo
_outtext* WriteConsole
_scrolltextwindow* ScrollConsoleScreenBuffer
_settextcolor* SetConsoleTextAttribute
_settextcursor* SetConsoleCursorInfo
_settextposition* SetConsoleCursorPosition
_settextwindow* SetConsoleWindowInfo
_wrapon* SetConsoleMode

Stream Routines

clearerr none
fclose CloseHandle
_fcloseall none
_fdopen none
feof none
ferror none
fflush FlushFileBuffers
fgetc none
_fgetchar none
fgetpos none
fgets none
_fileno none
_flushall none
fopen CreateFile
fprintf none
fputc none
_fputchar none
fputs none
fread ReadFile
freopen (std handles) SetStdHandle
fscanf none
fseek SetFilePointer
fsetpos SetFilePointer
_fsopen CreateFile
ftell SetFilePointer (check return value)
fwrite WriteFile
getc none
getchar none
gets none
_getw none
printf none
putc none
putchar none
puts none
_putw none
rewind SetFilePointer
_rmtmp none
scanf none
setbuf none
setvbuf none
_snprintf none
sprintf wsprintf
sscanf none
_tempnam GetTempFileName
tmpfile none
tmpnam GetTempFileName
ungetc none
vfprintf none
vprintf none
_vsnprintf none
vsprintf wvsprintf

Low-Level I/O

_close _lclose, CloseHandle
_commit FlushFileBuffers
_creat _lcreat, CreateFile
_dup DuplicateHandle
_dup2 none
_eof none
_lseek _llseek, SetFilePointer
_open _lopen, CreateFile
_read _lread, ReadFile
_sopen CreateFile
_tell SetFilePointer (check return value)
_write _lread

Console and Port I/O Routines

_cgets none
_cprintf none
_cputs none
_cscanf none
_getch ReadConsoleInput
_getche ReadConsoleInput
_inp none
_inpw none
_kbhit PeekConsoleInput
_outp none
_outpw none
_putch WriteConsoleInput
_ungetch none

Memory Allocation

_alloca none
_bfreeseg* none
_bheapseg* none
calloc GlobalAlloc
_expand none
free GlobalFree
_freect* GlobalMemoryStatus
_halloc* GlobalAlloc
_heapadd none
_heapchk none
_heapmin none
_heapset none
_heapwalk none
_hfree* GlobalFree
malloc GlobalAlloc
_memavl GlobalMemoryStatus
_memmax GlobalMemoryStatus
_msize* GlobalSize
realloc GlobalReAlloc
_set_new_handler none
_set_hnew_handler* none
_stackavail* none

Process and Environment Control Routines

abort none
assert none
atexit none
_cexit none
_c_exit none
_exec functions none
exit ExitProcess
_exit ExitProcess
getenv GetEnvironmentVariable
_getpid GetCurrentProcessId
longjmp none
_onexit none
perror FormatMessage
_putenv SetEnvironmentVariable
raise RaiseException
setjmp none
signal (ctrl-c only) SetConsoleCtrlHandler
_spawn functions CreateProcess
system CreateProcess

String Manipulation

strcat, wcscat lstrcat
strchr, wcschr none
strcmp, wcscmp lstrcmp
strcpy, wcscpy lstrcpy
strcspn, wcscspn none
_strdup, _wcsdup none
strerror FormatMessage
_strerror FormatMessage
_stricmp, _wcsicmp lstrcmpi
strlen, wcslen lstrlen
_strlwr, _wcslwr CharLower, CharLowerBuffer
strncat, wcsncat none
strncmp, wcsncmp none
strncpy, wcsncpy none
_strnicmp, _wcsnicmp none
_strnset, _wcsnset FillMemory, ZeroMemory
strpbrk, wcspbrk none
strrchr, wcsrchr none
_strrev, _wcsrev none
_strset, _wcsset FillMemory, ZeroMemory
strspn, wcsspn none
strstr, wcsstr none
strtok, wcstok none
_strupr, _wcsupr CharUpper, CharUpperBuffer

MS-DOS Interface

_bdos* none
_chain_intr* none
_disable* none
_dos_allocmem* GlobalAlloc
_dos_close* CloseHandle
_dos_commit* FlushFileBuffers
_dos_creat* CreateFile
_dos_creatnew* CreateFile
_dos_findfirst* FindFirstFile
_dos_findnext* FindNextFile
_dos_freemem* GlobalFree
_dos_getdate* GetSystemTime
_dos_getdiskfree* GetDiskFreeSpace
_dos_getdrive* GetCurrentDirectory
_dos_getfileattr* GetFileAttributes
_dos_getftime* GetFileTime
_dos_gettime* GetSystemTime
_dos_getvect* none
_dos_keep* none
_dos_open* OpenFile
_dos_read* ReadFile
_dos_setblock* GlobalReAlloc
_dos_setdate* SetSystemTime
_dos_setdrive* SetCurrentDirectory
_dos_setfileattr* SetFileAttributes
_dos_setftime* SetFileTime
_dos_settime* SetSystemTime
_dos_setvect* none
_dos_write* WriteFile
_dosexterr* GetLastError
_enable* none
_FP_OFF* none
_FP_SEG* none
_harderr* See Note 1
_hardresume* See Note 1
_hardretn* See Note 1
_int86* none
_int86x* none
_intdos* none
_intdosx* none
_segread* none


asctime See Note 2
clock See Note 2
ctime See Note 2
difftime See Note 2
_ftime See Note 2
_getsystime GetLocalTime
gmtime See Note 2
localtime See Note 2
mktime See Note 2
_strdate See Note 2
_strtime See Note 2
time See Note 2
_tzset See Note 2
_utime SetFileTime

Virtual Memory Allocation

_vfree* See Note 3
_vheapinit* See Note 3
_vheapterm* See Note 3
_vload* See Note 3
_vlock* See Note 3
_vlockcnt* See Note 3
_vmalloc* See Note 3
_vmsize* See Note 3
_vrealloc* See Note 3
_vunlock* See Note 3

32-Bit C Run Time

_beginthread CreateThread
_cwait WaitForSingleObject w/ GetExitCodeProcess
_endthread ExitThread
_findclose FindClose
_findfirst FindFirstFile
_findnext FindNextFile
_futime SetFileTime
_get_osfhandle none
_open_osfhandle none
_pclose See Note 4
_pipe CreatePipe
_popen See Note 4

NOTE 1: The _harderr functions do not exist in the Win32 API. However, much of their functionality is available through structured exception handling.

NOTE 2: The time functions are based on a format that is not used in Win32. There are specific Win32 time functions that are documented in the Help file.

NOTE 3: The virtual memory functions listed in this document are specific to the MS-DOS environment and were written to access memory beyond the 640K of RAM available in MS-DOS. Because this limitation does not exist in Win32, the standard memory allocation functions should be used.

NOTE 4: While _pclose() and _popen() do not have direct Win32 equivalents, you can (with some work) simulate them with the following calls:

_popen CreatePipe

_pclose WaitForSingleObject
NOTE 5: GetFileInformationByHandle() is the Win32 equivalent for the _fstat() C Run-time function. However, GetFileInformationByHandle() is not supported by Win32s version 1.1. It is supported in Win32s 1.2. GetFileSize(), GetFileAttributes(), GetFileTime(), and GetFileTitle() are supported by Win32s 1.1 and 1.2.