Windows, Unix and ANSI C API Comparison

  The "Windows System Programming"(3E)
has a great appendix about Windows, Unix, C Library API comparison.
It's obvious that this appendix lacks of many APIs in Memory, DLL and
Security related areas, but it is still very helpful for referencing
when doing system programming on windows platform.

  Original content can be found here:

1. I/O

1. 1 File & Directory

Subject Windows UNIX C Library Comments
Console I/O AllocConsole terminal I/O N/A
Console I/O FreeConsole terminal I/O N/A
Console I/O ReadConsole read getc, scanf, gets
Console I/O SetConsoleMode ioctl N/A
Console I/O WriteConsole write putc, printf, puts
Directory Mgt CreateDirectory mkdir* N/A Make a new directory
Directory Mgt FindClose closedir* N/A Close a directory search handle
Directory Mgt FindFirstFile opendir*, readdir* N/A Find first file matching a pattern
Directory Mgt FindNextFile readdir* N/A Find subsequent files
Directory Mgt GetCurrentDirectory getcwd* N/A
Directory Mgt GetFullPathName N/A N/A
Directory Mgt GetSystemDirectory Well-known pathnames N/A
Directory Mgt RemoveDirectory rmdir, unlink* remove
Directory Mgt SearchPath Use opendir, readdir N/A Search for a file on a specified path
Directory Mgt SetCurrentDirectory chdir*, fchdir N/A Change the working directory
Error Handling FormatMessage strerror perror
Error Handling GetLastError errno errno Global variable
Error Handling SetLastError errno errno Global variable
File Locking LockFile fcntl (cmd=F_GETLK, ..) N/A
File Locking LockFileEx fcntl (cmd=F_GETLK, ..) N/A
File Locking UnlockFile fcntl (cmd=F_GETLK, ..) N/A
File Locking UnlockFileEx fcntl (cmd=F_GETLK, ..) N/A
File System CloseHandle (file handle) close* fclose CloseHandle is not limited to files
File System CopyFile open; read; write; close fopen; fread; fwrite; fclose Duplicate a file
File System CreateFile open*, creat* fopen Open/create a file
File System DeleteFile unlink* remove Delete a file
File System FlushFileBuffers fsynch fflush Write file buffers
File System GetFileAttributes stat*, fstat*, lstat N/A
File System GetFileInformationByHandle stat*, fstat*, lstat N/A Fill structure with file info
File System GetFileSize stat*, fstat*, lstat ftell, fseek Get length of file in bytes
File System GetFileTime stat*, fstat*, lstat N/A
File System GetFileType stat*, fstat*, lstat N/A Check for character stream device or file
File System GetStdHandle Use file desc 0, 1, or 2 Use stdin, stdout, stderr
File System GetTempFileName Use C library tmpnam Create a unique file name
File System GetTempFileName, CreateFile Use C library tmpfile Create a temporary file
File System GetTempPath /temp path N/A Directory for temp files
File System MoveFile, MoveFileEx Use C library rename Rename a file or directory
File System CreateHardLink link, unlink* N/A Windows does not support links
File System N/A symlink N/A Create a symbolic link
File System N/A readlink N/A Read name in a symbolic link
File System N/A, ReadFile returns 0 bytes N/A, read returns 0 bytes feof Rest for end of file
File System N/A, use multiple ReadFiles readv N/A, use multiple freads Scatter read
File System N/A, use multiple WriteFiles writev N/A, use multiple fwrites Gather write
File System ReadFile read fread Read data from a file
File System SetEndOfFile chsize* N/A
File System SetFileAttributes fcntl N/A
File System SetFilePointer lseek fseek Set file pointer
FileSystem SetFilePointer (to 0) lseek (0) rewind
File System SetFileTime utime* N/A
File System SetStdHandle close, dup*, dup2*, or fcntl freopen dup2 or fcntl
File System WriteFile write fwrite Write data to a file

1.2 Async I/O

Subject Windows UNIX C Library Comments
Asynch I/O GetOverlappedResult N/A N/A
Asynch I/O ReadFileEx N/A N/A Extended I/O with completion routine
Asynch I/O SleepEx N/A N/A Alertable wait
Asynch I/O WaitForMultipleObjects (file handles) poll, select N/A
Asynch I/O WaitForMultipleObjectsEx N/A N/A Alertable wait
Asynch I/O WriteFileEx N/A N/A Extended I/O with completion routine
Asynch I/O WaitForSingleObjectEx waitpid N/A Alertable wait

2. Memory & DLL

Subject Windows UNIX C Library
Mapped Files CreateFileMapping shmget N/A
Mapped Files MapViewOfFile mmap, shmat N/A
Mapped Files MapViewOfFileEx mmap, shmat N/A
Mapped Files OpenFileMapping shmget N/A
Mapped Files UnmapViewOfFile munmap, shmdt, shmctl N/A
Memory Mgt GetProcessHeap N/A N/A
Memory Mgt GetSystemInfo N/A N/A
Memory Mgt HeapAlloc sbrk, brk, or C library malloc, calloc
Memory Mgt HeapCreate N/A N/A
Memory Mgt HeapDestroy N/A N/A
Memory Mgt HeapFree Use C library free
Memory Mgt HeapReAlloc Use C library realloc
Memory Mgt HeapSize N/A N/A
Shared Memory CloseHandle (map handle) shmctl N/A
Shared Memory CreateFileMapping, OpenFileMapping shmget N/A
Shared Memory MapViewOfFile shmat N/A
Shared Memory UnmapViewOfFile shmdt N/A
DLLs LoadLibrary dlopen N/A
DLLs FreeLibrary dlclose N/A
DLLs GetProcAddress dlsyn N/A
DLLs DllMain pthread_once N/A

3. Process & Thread

3.1 Process

Subject Windows UNIX C Library Comments
Process Mgt CreateProcess fork (); execl ()*, system() N/A There are 6 execxx functions
Process Mgt ExitProcess _exit exit
Process Mgt GetCommandLine argv [] argv []
Process Mgt GetCurrentProcess getpid* N/A
Process Mgt GetCurrentProcessId getpid* N/A
Process Mgt GetEnvironmentStrings N/A getenv
Process Mgt GetEnvironmentVariable N/A getenv
Process Mgt GetExitCodeProcess wait, waitpid N/A
Process Mgt GetProcessTimes times, wait3, wait4 N/A
Process Mgt GetProcessWorkingSetSize wait3, wait4 N/A
Process Mgt N/A execl*, execv*, execle*, execve*, execlp*, execvp* N/A Windows does not have a direct equivalent
Process Mgt N/A fork, vfork N/A Windows does not have a direct equivalent
Process Mgt N/A getppid N/A No parent/child relationships in Windows
Process Mgt N/A getgid, getegid N/A No process groups in Windows
Process Mgt N/A getpgrp N/A
Process Mgt N/A setpgid N/A
Process Mgt N/A setsid N/A
Process Mgt N/A tcgetpgrp N/A
Process Mgt N/A tcsetpgrp N/A
Process Mgt OpenProcess N/A N/A
Process Mgt SetEnvironmentVariable putenv N/A putenv is not part of the Standard C library
Process Mgt TerminateProcess kill N/A
Synch: Process WaitForMultipleObjects (process handles) waitpid N/A
Synch: Process WaitForSingleObject (process handle) wait, waitpid N/A
Timers KillTimer alarm (0) N/A
Timers SetTimer alarm N/A
Timers Sleep sleep N/A
Timers Sleep poll or select, no file descriptor N/A

3.2 Thread

Thread MgtCreateRemoteThreadN/A
Thread MgtCreateThread, _beginthreadexpthread_create
Thread MgtExitThread, _endthreadexpthread_exit
Thread MgtGetCurrentThreadpthread_self
Thread MgtGetCurrentThreadIdN/A
Thread MgtGetExitCodeThreadpthread_yield
Thread MgtResumeThreadN/A
Thread MgtSuspendThreadN/A
Thread MgtTerminateThreadpthread_cancelpthread_cancel is safer
Thread MgtWaitForSingleObject(thread handle)pthread_join
Thread PriorityGetPriorityClasspthread_attr_getschedpolicy, getpriority
Thread PriorityGetThreadPrioritypthread_attr_getschedparam
Thread PrioritySetPriorityClasspthread_attr_setschedpolicy, setpriority, nice
Thread PrioritySetThreadPrioritypthread_attr_setschedparam
Note: Pthreads, while a part of all modern UNIX offerings, are available on non-UNIX systems as well.

3.3 Synchronization

Synch: CritSecDeleteCriticalSectionUse mutexes to emulate critical sections. Some systems provide proprietary equivalents.C library is not applicable
Synch: CritSecEnterCriticalSectionC library is not applicable
Synch: CritSecInitializeCriticalSection
Synch: CritSecLeaveCriticalSection
Synch: EventCloseHandle (event handle)pthread_cond_destroy
Synch: EventCreateEventpthread_cond_init
Synch: EventPulseEventpthread_cond_signalManual-reset event
Synch: EventResetEventN/A
Synch: EventSetEventpthread_cond_broadcastAuto-reset event
Synch: EventWaitForSingleObject (event handle)pthread_cond_wait
Synch: EventWaitForSingleObject (event handle)pthread_timed_wait
Synch: MutexCloseHandle (mutex handle)pthread_mutex_destroy
Synch: MutexCreateMutexpthread_mutex_init
Synch: MutexReleaseMutexpthread_mutex_unlock
Synch: MutexWaitForSingleObject (mutex handle)pthread_mutex_lock
Synch: SemCreateSemaphoresemget
Synch: SemN/AsemctlWindows does not directly support all these options
Synch: SemOpenSemaphoresemget
Synch: SemReleaseSemaphoresemop (+)
Synch: SemWaitForSingleObject (semaphore handle)semop (-)Windows can wait for only one count

3.4 IPC

Subject Windows UNIX C Library Comments
IPC CallNamedPipe N/A N/A CreateFile, WriteFile, ReadFile, CloseHandle
IPC CloseHandle (pipe handle) close, msgctl pclose Not part of the Standard C library—see Stevens
IPC ConnectNamedPipe N/A N/A
IPC CreateMailslot N/A N/A
IPC CreateNamedPipe mkfifo, msgget N/A
IPC CreatePipe pipe popen Not part of the Standard C library—see Stevens
IPC DuplicateHandle dup, dup2, or fcntl N/A Or use file names CONIN$, CONOUT$
IPC GetNamedPipeHandleState stat, fstat, lstat64 N/A
IPC GetNamedPipeInfo stat, fstat, lstat N/A
IPC ImpersonateNamedPipeClient N/A N/A
IPC PeekNamedPipe N/A N/A
IPC ReadFile (named pipe handle) read (fifo), msgsnd N/A
IPC RevertToSelf N/A N/A
IPC SetNamedPipeHandleState N/A N/A
IPC TransactNamedPipe N/A N/A WriteFile; ReadFile
IPC WriteFile (named pipe handle) write (fifo), msgrcv N/A
Misc. GetComputerName uname N/A
Misc. SetComputerName N/A N/A
Security SetNamedPipeIdentity Use directory sticky bit N/A

4. Misc

4.1 Security

SecurityAddAccessAllowedAcechmod, fchmodC library does not support security
SecurityAddAccessDeniedAcechmod, fchmod
SecurityDeleteAcechmod, fchmod
SecurityGetAcestat*, fstat*, lstat
SecurityGetAclInformationstat*, fstat*, lstat
SecurityGetFileSecuritystat*, fstat*, lstat
SecurityGetSecurityDescriptorDaclstat*, fstat*, lstat
SecurityLookupAccountNamegetpwnam, getgrnam
SecurityLookupAccountSidgetpwuid, getuid, geteuid
SecurityN/Agetpwend, setpwent, endpwent
SecurityN/Agetgrent, setgrent, endgrent
SecurityN/ASetuid, seteuid, setreuid
SecurityN/ASetgid, setegid, setregid
SecurityOpenProcessTokengetgroups, setgroups, initgroups
SecuritySetFileSecuritychmod*, fchmod
SecuritySetSecurityDescriptorGroupchown, fchown, lchown
SecuritySetSecurityDescriptorOwnerchown, fchown, lchown

4.2 Exception Handling

SubjectWindowsUNIXC Library
SEH_try – _exceptUse C library signalsUse C library signals
SEH_try – _finallyUse C library signalsUse C library signals
SEHAbnormalTerminationUse C library signalsUse C library signals
SEHGetExceptionCodeUse C library signalsUse C library signals
SEHRaiseExceptionUse C library signalssignal, raise
SignalsUse _finally blockUse C libraryatexit
SignalsUse C library or terminate processkillraise
SignalsUse C libraryUse C librarysignal
SignalsUse SEH, VEHsigemptysetN/A
SignalsUse SEH, VEHsigfillsetN/A
SignalsUse SEH, VEHsigaddsetN/A
SignalsUse SEH, VEHsigdelsetN/A
SignalsUse SEH, VEHsigismemberN/A
SignalsUse SEH, VEHsigprocmaskN/A
SignalsUse SEH, VEHsigpendingN/A
SignalsUse SEH, VEHsigactionN/A
SignalsUse SEH, VEHsigsetjmpN/A
SignalsUse SEH, VEHsiglongjmpN/A
SignalsUse SEH, VEHsigsuspendfN/A
SignalsUse SEH, VEHpsignalN/A
SignalsUse SEH, VEH, or C libraryUse C libraryabort
Note: Many UNIX vendors provide proprietary exception handling capabilities.

4.3 System Information & Time

Subject Windows UNIX C Library Comments
System Info GetDiskFreeSpace N/A N/A
System Info GetSystemInfo getrusage N/A
System Info GetVersion uname N/A
System Info GetVolumeInformation N/A N/A
System Info GlobalMemoryStatus getrlimit N/A
System Info Various defined constants sysconf, pathconf, fpathconf N/A
Time GetSystemTime Use C library time, gmtime
Time See ls program, Use C library asctime
Time CompareFileTime Use C library difftime Compare "calendar" times
Time FileTimeToLocalFileTime, FileTimeToSystemTime Use C library localtime
Time FileTimeToSystemTime Use C library gmtime
Time GetLocalTime Use C library time, localtime
Time See touch program, Use C library strftime
Time SetLocalTime N/A N/A
Time SetSystemTime N/A N/A
Time Subtract file times Use C library difftime
Time SystemTimeToFileTime Use C library mktime