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 multiplefreads | Scatter read |
| File System | N/A, use multiple WriteFiles | writev | N/A, use multiplefwrites | 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 execxxfunctions |
| 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
| Subject | Windows | UNIX/Pthreads | Comments |
|---|---|---|---|
| Thread Mgt | CreateRemoteThread | N/A | |
| TLS | TlsAlloc | pthread_key_alloc | |
| TLS | TlsFree | pthread_key_delete | |
| TLS | TlsGetValue | pthread_getspecific | |
| TLS | TlsSetValue | pthread_setspecific | |
| Thread Mgt | CreateThread, _beginthreadex | pthread_create | |
| Thread Mgt | ExitThread, _endthreadex | pthread_exit | |
| Thread Mgt | GetCurrentThread | pthread_self | |
| Thread Mgt | GetCurrentThreadId | N/A | |
| Thread Mgt | GetExitCodeThread | pthread_yield | |
| Thread Mgt | ResumeThread | N/A | |
| Thread Mgt | SuspendThread | N/A | |
| Thread Mgt | TerminateThread | pthread_cancel | pthread_cancel is safer |
| Thread Mgt | WaitForSingleObject(thread handle) | pthread_join | |
| Thread Priority | GetPriorityClass | pthread_attr_getschedpolicy, getpriority | |
| Thread Priority | GetThreadPriority | pthread_attr_getschedparam | |
| Thread Priority | SetPriorityClass | pthread_attr_setschedpolicy, setpriority, nice | |
| Thread Priority | SetThreadPriority | pthread_attr_setschedparam | |
| Note: Pthreads, while a part of all modern UNIX offerings, are available on non-UNIX systems as well. | |||
3.3 Synchronization
| Subject | Windows | UNIX/Pthreads | Comments |
|---|---|---|---|
| Synch: CritSec | DeleteCriticalSection | Use mutexes to emulate critical sections. Some systems provide proprietary equivalents. | C library is not applicable |
| Synch: CritSec | EnterCriticalSection | C library is not applicable | |
| Synch: CritSec | InitializeCriticalSection | ||
| Synch: CritSec | LeaveCriticalSection | ||
| Synch: Event | CloseHandle (event handle) | pthread_cond_destroy | |
| Synch: Event | CreateEvent | pthread_cond_init | |
| Synch: Event | PulseEvent | pthread_cond_signal | Manual-reset event |
| Synch: Event | ResetEvent | N/A | |
| Synch: Event | SetEvent | pthread_cond_broadcast | Auto-reset event |
| Synch: Event | WaitForSingleObject (event handle) | pthread_cond_wait | |
| Synch: Event | WaitForSingleObject (event handle) | pthread_timed_wait | |
| Synch: Mutex | CloseHandle (mutex handle) | pthread_mutex_destroy | |
| Synch: Mutex | CreateMutex | pthread_mutex_init | |
| Synch: Mutex | ReleaseMutex | pthread_mutex_unlock | |
| Synch: Mutex | WaitForSingleObject(mutex handle) | pthread_mutex_lock | |
| Synch: Sem | CreateSemaphore | semget | |
| Synch: Sem | N/A | semctl | Windows does not directly support all these options |
| Synch: Sem | OpenSemaphore | semget | |
| Synch: Sem | ReleaseSemaphore | semop (+) | |
| Synch: Sem | WaitForSingleObject(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, orfcntl | 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
| Subject | Windows | UNIX | Comments |
|---|---|---|---|
| Security | AddAccessAllowedAce | chmod, fchmod | C library does not support security |
| Security | AddAccessDeniedAce | chmod, fchmod | |
| Security | AddAuditAce | N/A | |
| Security | CreatePrivateObjectSecurity | N/A | |
| Security | DeleteAce | chmod, fchmod | |
| Security | DestroyPrivateObjectSecurity | N/A | |
| Security | GetAce | stat*, fstat*, lstat | |
| Security | GetAclInformation | stat*, fstat*, lstat | |
| Security | GetFileSecurity | stat*, fstat*, lstat | |
| Security | GetPrivateObjectSecurity | N/A | |
| Security | GetSecurityDescriptorDacl | stat*, fstat*, lstat | |
| Security | GetUserName | getlogin | |
| Security | InitializeAcl | N/A | |
| Security | InitializeSecurityDescriptor | Umask | |
| Security | LookupAccountName | getpwnam, getgrnam | |
| Security | LookupAccountSid | getpwuid, getuid, geteuid | |
| Security | N/A | getpwend, setpwent, endpwent | |
| Security | N/A | getgrent, setgrent, endgrent | |
| Security | N/A | Setuid, seteuid, setreuid | |
| Security | N/A | Setgid, setegid, setregid | |
| Security | OpenProcessToken | getgroups, setgroups, initgroups | |
| Security | SetFileSecurity | chmod*, fchmod | |
| Security | SetPrivateObjectSecurity | N/A | |
| Security | SetSecurityDescriptorDacl | Umask | |
| Security | SetSecurityDescriptorGroup | chown, fchown, lchown | |
| Security | SetSecurityDescriptorOwner | chown, fchown, lchown | |
| Security | SetSecurityDescriptorSacl | N/A |
4.2 Exception Handling
| Subject | Windows | UNIX | C Library |
|---|---|---|---|
| SEH | _try – _except | Use C library signals | Use C library signals |
| SEH | _try – _finally | Use C library signals | Use C library signals |
| SEH | AbnormalTermination | Use C library signals | Use C library signals |
| SEH | GetExceptionCode | Use C library signals | Use C library signals |
| SEH | RaiseException | Use C library signals | signal, raise |
| Signals | Use _finally block | Use C library | atexit |
| Signals | Use C library or terminate process | kill | raise |
| Signals | Use C library | Use C library | signal |
| Signals | Use SEH, VEH | sigemptyset | N/A |
| Signals | Use SEH, VEH | sigfillset | N/A |
| Signals | Use SEH, VEH | sigaddset | N/A |
| Signals | Use SEH, VEH | sigdelset | N/A |
| Signals | Use SEH, VEH | sigismember | N/A |
| Signals | Use SEH, VEH | sigprocmask | N/A |
| Signals | Use SEH, VEH | sigpending | N/A |
| Signals | Use SEH, VEH | sigaction | N/A |
| Signals | Use SEH, VEH | sigsetjmp | N/A |
| Signals | Use SEH, VEH | siglongjmp | N/A |
| Signals | Use SEH, VEH | sigsuspendf | N/A |
| Signals | Use SEH, VEH | psignal | N/A |
| Signals | Use SEH, VEH, or C library | Use C library | abort |
| Note: Many UNIX vendors provide proprietary exception handling capabilities. | |||
4.3 System Information & Time
from: http://blogs.msdn.com/b/csliu/archive/2009/03/20/windows-unix-and-ansi-c-api-comparison.aspx
3017

被折叠的 条评论
为什么被折叠?



