📄 wy__cfunc.cpp
字号:
/* Copyright is licensed under GNU LGPL. by I.J.Wang 2005*/#define WYLIB_SOURCE#include "wy__cfunc.h"#include "wydefs.h" // for WY__CANCEL_POINT#include <fcntl.h>#ifdef WY_DEBUGstatic int wyc__fdcnt=0;static int wyc__fdcnt_max=0;static ::pthread_mutex_t wyc__mtx= PTHREAD_MUTEX_INITIALIZER;int wydbg_get_fdcnt(void) throw(){ int v( ::pthread_mutex_lock(&wyc__mtx) ); if(v!=0) { WY_TERMINATE(""); } v=wyc__fdcnt; if(::pthread_mutex_unlock(&wyc__mtx)!=0) { WY_TERMINATE(""); } return(v);};int wydbg_get_fdcnt_max(void) throw(){ int v( ::pthread_mutex_lock(&wyc__mtx) ); if(v!=0) { WY_TERMINATE(""); } v=wyc__fdcnt_max; if(::pthread_mutex_unlock(&wyc__mtx)!=0) { WY_TERMINATE(""); } return(v);};void wydbg_dec_fdcnt(void) throw(){ int v( ::pthread_mutex_lock(&wyc__mtx) ); if(v!=0) { WY_TERMINATE(""); } --wyc__fdcnt; if(::pthread_mutex_unlock(&wyc__mtx)!=0) { WY_TERMINATE(""); }};#endif // end WY_DEBUGint wyc_open(const char* pathname, int flags){#ifdef WY_DEBUG if(::pthread_mutex_lock(&wyc__mtx)!=0) { WY_TERMINATE(""); }#endif // end WY_DEBUG WY__CANCEL_POINT; const int v=::open(pathname,flags); WY__CANCEL_POINT;#ifdef WY_DEBUG if(v!=-1) { ++wyc__fdcnt; if(wyc__fdcnt>wyc__fdcnt_max) { wyc__fdcnt_max=wyc__fdcnt; } } if(::pthread_mutex_unlock(&wyc__mtx)!=0) { WY_TERMINATE(""); }#endif // end WY_DEBUG return(v);};int wyc_open(const char* pathname, int flags, mode_t mode){#ifdef WY_DEBUG if(::pthread_mutex_lock(&wyc__mtx)!=0) { WY_TERMINATE(""); }#endif // end WY_DEBUG WY__CANCEL_POINT; const int v=::open(pathname,flags,mode); WY__CANCEL_POINT;#ifdef WY_DEBUG if(v!=-1) { ++wyc__fdcnt; if(wyc__fdcnt>wyc__fdcnt_max) { wyc__fdcnt_max=wyc__fdcnt; } } if(::pthread_mutex_unlock(&wyc__mtx)!=0) { WY_TERMINATE(""); }#endif // end WY_DEBUG return(v);};int wyc_creat(const char* pathname, mode_t mode){#ifdef WY_DEBUG if(::pthread_mutex_lock(&wyc__mtx)!=0) { WY_TERMINATE(""); }#endif // end WY_DEBUG WY__CANCEL_POINT; const int v=::creat(pathname,mode); WY__CANCEL_POINT;#ifdef WY_DEBUG if(v!=-1) { ++wyc__fdcnt; if(wyc__fdcnt>wyc__fdcnt_max) { wyc__fdcnt_max=wyc__fdcnt; } } if(::pthread_mutex_unlock(&wyc__mtx)!=0) { WY_TERMINATE(""); }#endif // end WY_DEBUG return(v);};int wyc_dup(int oldfd){#ifdef WY_DEBUG if(::pthread_mutex_lock(&wyc__mtx)!=0) { WY_TERMINATE(""); }#endif // end WY_DEBUG const int v=::dup(oldfd); #ifdef WY_DEBUG if(v!=-1) { ++wyc__fdcnt; if(wyc__fdcnt>wyc__fdcnt_max) { wyc__fdcnt_max=wyc__fdcnt; } } if(::pthread_mutex_unlock(&wyc__mtx)!=0) { WY_TERMINATE(""); }#endif // end WY_DEBUG return(v);};// [Syn] Is the given fd an open file descriptor//// [Ret] 1= fd is an open file descriptor// 0= otherwise//int wyc__is_open(int fd){ return (::fcntl(fd,F_GETFL)==-1)? 0:1;};int wyc_dup2(int oldfd, int newfd){#ifdef WY_DEBUG if(::pthread_mutex_lock(&wyc__mtx)!=0) { WY_TERMINATE(""); } int t= wyc__is_open(newfd); const int v=::dup2(oldfd,newfd); if(v!=-1) { ++wyc__fdcnt; wyc__fdcnt-=t; if(wyc__fdcnt>wyc__fdcnt_max) { wyc__fdcnt_max=wyc__fdcnt; } } if(::pthread_mutex_unlock(&wyc__mtx)!=0) { WY_TERMINATE(""); } return(v);#else return ::dup2(oldfd,newfd); #endif // end WY_DEBUG};int wyc_fstat(int fd, struct stat* buf){ return ::fstat(fd,buf); };int wyc_stat(const char* pathname, struct stat* buf){ return ::stat(pathname,buf); };int wyc_fsync(int fd){ WY__CANCEL_POINT; const int v( ::fsync(fd) ); WY__CANCEL_POINT; return(v);};int wyc_fdatasync(int fd){ return ::fdatasync(fd); };int wyc_isatty(int fd){ return(::isatty(fd)); };
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -