📄 ntstream.cpp
字号:
/* -------------------------------------------------------------------- Module: ntstream.cpp Subject: Share-Aware File Streams Author: Heinz Ozwirk Started: 30.05.1993 15:30:32 Modified: 31.05.1993 10:33:35 -------------------------------------------------------------------- Description: public domain from the FidoNet C++ echo -------------------------------------------------------------------- History: (insert new entries at top of list) dd.mm.yyyy/ho description -------------------------------------------------------------------- *//* --- Includes ------------------------------------------------------- */#include "ntstream.h"#include <fcntl.h>#include <io.h>/* --- Defines -------------------------------------------------------- *//* --- Constants ------------------------------------------------------ *//* --- Types ---------------------------------------------------------- *//* --- Prototypes ----------------------------------------------------- *//* --- Global Variables ----------------------------------------------- *//* --- Local Variables ------------------------------------------------ *//* --- Implementation ------------------------------------------------- */static int newMode(int m){ int how = 0; if (m & nfstream::sh_compat) how |= SH_COMPAT; else if (m & nfstream::sh_none) how |= SH_DENYRW; else if (m & nfstream::sh_read) { if (m & nfstream::sh_write) how |= SH_DENYNO; else how |= SH_DENYWR; } else if (m & nfstream::sh_write) how |= SH_DENYRD; else how |= SH_DENYRW; if (m & ios::out) { if (m & ios::in) how |= O_RDWR; else how |= O_WRONLY; if (!(m & ios::nocreate)) { how |= O_CREAT; if (m & ios::noreplace) how |= O_EXCL; } if (m & ios::trunc) how |= O_TRUNC; } else { how |= O_RDONLY; } if (m & ios::binary) how |= O_BINARY; else how |= O_TEXT; if (m & ios::app) how |= O_APPEND; return how;}nfstream::nfstream(const signed char *name, int mode, int prot) : fstream(){ open(name, mode, prot);}nfstream::nfstream(const unsigned char *name, int mode, int prot) : fstream(){ open(name, mode, prot);}void nfstream::open(const signed char *name, int mode, int prot){ int howM = newMode(mode); fd = ::open((const char *)name, howM, prot); if (fd == -1) setstate(failbit); else attach(fd);}void nfstream::close(){ if (fd != -1) { fstream::close(); ::close(fd); fd = -1; }}nifstream::nifstream(const signed char *name, int mode, int prot) : ifstream(){ open(name, mode, prot);}nifstream::nifstream(const unsigned char *name, int mode, int prot) : ifstream(){ open(name, mode, prot);}void nifstream::open(const signed char *name, int mode, int prot){ int howM = newMode(mode); fd = ::open((const char *)name, howM, prot); if (fd == -1) setstate(failbit); else attach(fd);}void nifstream::close(){ if (fd != -1) { ifstream::close(); ::close(fd); fd = -1; }}nofstream::nofstream(const signed char *name, int mode, int prot) : ofstream(){ open(name, mode, prot);}nofstream::nofstream(const unsigned char *name, int mode, int prot) : ofstream(){ open(name, mode, prot);}void nofstream::open(const signed char *name, int mode, int prot){ int howM = newMode(mode); fd = ::open((const char *)name, howM, prot); if (fd == -1) setstate(failbit); else attach(fd);}void nofstream::close(){ if (fd != -1) { ofstream::close(); ::close(fd); fd = -1; }}/* --- End of File ---------------------------------------------------- */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -