⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sys.h

📁 OTP是开放电信平台的简称
💻 H
📖 第 1 页 / 共 3 页
字号:
#  ifdef __WIN32__static unsigned long zero_value = 0, one_value = 1;#    define SET_BLOCKING(fd)	{ if (ioctlsocket((fd), FIONBIO, &zero_value) != 0) fprintf(stderr, "Error setting socket to non-blocking: %d\n", WSAGetLastError()); }#    define SET_NONBLOCKING(fd)	ioctlsocket((fd), FIONBIO, &one_value)#  else#    ifdef VXWORKS#      include <fcntl.h> /* xxxP added for O_WRONLY etc ... macro:s ... */#      include <ioLib.h>static const int zero_value = 0, one_value = 1;#      define SET_BLOCKING(fd)	ioctl((fd), FIONBIO, (int)&zero_value)#      define SET_NONBLOCKING(fd)	ioctl((fd), FIONBIO, (int)&one_value)#      define ERRNO_BLOCK EWOULDBLOCK#    else#      ifdef NB_FIONBIO		/* Old BSD */#        include <sys/ioctl.h>  static const int zero_value = 0, one_value = 1;#        define SET_BLOCKING(fd)	ioctl((fd), FIONBIO, &zero_value)#        define SET_NONBLOCKING(fd)	ioctl((fd), FIONBIO, &one_value)#        define ERRNO_BLOCK EWOULDBLOCK#      else /* !NB_FIONBIO */#        include <fcntl.h>#        ifdef NB_O_NDELAY		/* Nothing needs this? */#          define NB_FLAG O_NDELAY#          ifndef ERRNO_BLOCK		/* allow override (e.g. EAGAIN) via Makefile */#            define ERRNO_BLOCK EWOULDBLOCK#          endif#        else  /* !NB_O_NDELAY */	/* The True Way - POSIX!:-) */#          define NB_FLAG O_NONBLOCK#          define ERRNO_BLOCK EAGAIN#        endif /* !NB_O_NDELAY */#        define SET_BLOCKING(fd)	fcntl((fd), F_SETFL, \	  			      fcntl((fd), F_GETFL, 0) & ~NB_FLAG)#        define SET_NONBLOCKING(fd)	fcntl((fd), F_SETFL, \				      fcntl((fd), F_GETFL, 0) | NB_FLAG)#      endif /* !NB_FIONBIO */#    endif /* _WXWORKS_ */#  endif /* !__WIN32__ */# endif /* _OSE_ */#endif /* WANT_NONBLOCKING */void __noreturn erl_exit(int n, char*, ...);/* Some special erl_exit() codes: */#define ERTS_INTR_EXIT	INT_MIN		/* called from signal handler */#define ERTS_ABORT_EXIT	(INT_MIN + 1)	/* no crash dump; only abort() */#define ERTS_DUMP_EXIT	(127)		/* crash dump; then exit() */#ifndef ERTS_SMPEXTERN_FUNCTION(int, check_async_ready, (_VOID_));#ifdef USE_THREADSEXTERN_FUNCTION(void, sys_async_ready, (int hndl));#endif#endifEterm erts_check_io_info(void *p);/* Size of misc memory allocated from system dependent code */Uint erts_sys_misc_mem_sz(void);/* print stuff is declared here instead of in global.h, so sys stuff won't   have to include global.h */#include "erl_printf.h"/* Io constants to erts_print and erts_putc */#define ERTS_PRINT_STDERR	(2)#define ERTS_PRINT_STDOUT	(1)#define ERTS_PRINT_INVALID	(0) /* Don't want to use 0 since CBUF was 0 */#define ERTS_PRINT_FILE		(-1)#define ERTS_PRINT_SBUF		(-2)#define ERTS_PRINT_SNBUF	(-3)#define ERTS_PRINT_DSBUF	(-4)#define ERTS_PRINT_MIN		ERTS_PRINT_DSBUFtypedef struct {    char *buf;    size_t size;} erts_print_sn_buf;int erts_print(int to, void *arg, char *format, ...);	/* in utils.c */int erts_putc(int to, void *arg, char);			/* in utils.c *//* logger stuff is declared here instead of in global.h, so sys files   won't have to include global.h */erts_dsprintf_buf_t *erts_create_logger_dsbuf(void);int erts_send_info_to_logger(Eterm, erts_dsprintf_buf_t *);int erts_send_warning_to_logger(Eterm, erts_dsprintf_buf_t *);int erts_send_error_to_logger(Eterm, erts_dsprintf_buf_t *);int erts_send_info_to_logger_str(Eterm, char *); int erts_send_warning_to_logger_str(Eterm, char *);int erts_send_error_to_logger_str(Eterm, char *);int erts_send_info_to_logger_nogl(erts_dsprintf_buf_t *);int erts_send_warning_to_logger_nogl(erts_dsprintf_buf_t *);int erts_send_error_to_logger_nogl(erts_dsprintf_buf_t *);int erts_send_info_to_logger_str_nogl(char *);int erts_send_warning_to_logger_str_nogl(char *);int erts_send_error_to_logger_str_nogl(char *);typedef struct preload {    char *name;			/* Name of module */    int  size;			/* Size of code */    unsigned char* code;	/* Code pointer */} Preload;/* * This structure contains options to all built in drivers. * None of the drivers use all of the fields. *//* OSE: Want process_type and priority in here as well! Needs updates in erl_bif_ports.c! */typedef struct _SysDriverOpts {    int ifd;			/* Input file descriptor (fd driver). */    int ofd;			/* Outputfile descriptor (fd driver). */    int packet_bytes;		/* Number of bytes in packet header. */    int read_write;		/* Read and write bits. */    int use_stdio;		/* Use standard I/O: TRUE or FALSE. */    int redir_stderr;           /* Redirect stderr to stdout: TRUE/FALSE. */    int hide_window;		/* Hide this windows (Windows). */    int exit_status;		/* Report exit status of subprocess. */    char *envir;		/* Environment of the port process, */				/* in Windows format. */    char *wd;			/* Working directory. */#ifdef _OSE_    enum PROCESS_TYPE process_type;    OSPRIORITY priority;#endif /* _OSE_ */} SysDriverOpts;extern char os_type[];extern int sys_init_time(void);#if defined(ERTS_TIMER_THREAD)#define erts_deliver_time()#elseextern void erts_deliver_time(void);#endifextern void erts_time_remaining(SysTimeval *);extern int erts_init_time_sup(void);extern void erts_sys_init_float(void);extern void erts_thread_init_float(void);/* Dynamic library/driver loading */extern void erl_sys_ddll_init(void); /* to initialize mutexes etc */extern int erts_sys_ddll_open(char *path, void **handle);extern int erts_sys_ddll_load_driver_init(void *handle, void **function);extern int erts_sys_ddll_close(void *handle);extern void *erts_sys_ddll_call_init(void *function);extern int erts_sys_ddll_sym(void *handle, char *name, void **function);extern char *erts_sys_ddll_error(int code);/* * System interfaces for startup/sae code (functions found in respective sys.c) */#ifdef ERTS_SMPvoid erts_sys_schedule_interrupt(int set);void erts_sys_schedule_interrupt_timed(int set, long msec);void erts_sys_main_thread(void);#else#define erts_sys_schedule_interrupt(Set)#endifextern void erts_sys_prepare_crash_dump(void);extern void erts_sys_pre_init(void);extern void erl_sys_init(void);extern void erl_sys_args(int *argc, char **argv);extern void erl_sys_schedule(int);#ifdef _OSE_extern void erl_sys_init_final(void);#elsevoid sys_tty_reset(void);#endif#ifdef ERTS_SMP_USE_IO_THREADextern erts_smp_tid_t erts_io_thr_tid; /* io.c */#endifEXTERN_FUNCTION(int, sys_max_files, (_VOID_));void sys_init_io(void);Preload* sys_preloaded(void);EXTERN_FUNCTION(unsigned char*, sys_preload_begin, (Preload*));EXTERN_FUNCTION(void, sys_preload_end, (Preload*));EXTERN_FUNCTION(int, sys_get_key, (int));void elapsed_time_both(unsigned long *ms_user, unsigned long *ms_sys, 		       unsigned long *ms_user_diff, unsigned long *ms_sys_diff);void wall_clock_elapsed_time_both(unsigned long *ms_total, 				  unsigned long *ms_diff);void get_time(int *hour, int *minute, int *second);void get_date(int *year, int *month, int *day);void get_localtime(int *year, int *month, int *day, 		   int *hour, int *minute, int *second);void get_universaltime(int *year, int *month, int *day, 		       int *hour, int *minute, int *second);int univ_to_local(Sint *year, Sint *month, Sint *day, 		  Sint *hour, Sint *minute, Sint *second);int local_to_univ(Sint *year, Sint *month, Sint *day, 		  Sint *hour, Sint *minute, Sint *second, int isdst);void get_now(Uint*, Uint*, Uint*);EXTERN_FUNCTION(void, set_break_quit, (void (*)(void), void (*)(void)));typedef void *GETENV_STATE;void os_flavor(char*, unsigned);void os_version(int*, int*, int*);void init_getenv_state(GETENV_STATE *);char * getenv_string(GETENV_STATE *);void fini_getenv_state(GETENV_STATE *);/* xxxP */void init_sys_float(void);int sys_chars_to_double(char*, double*);int sys_double_to_chars(double, char*);void sys_get_pid(char *);int sys_putenv(char *);/* utils.c *//* Options to sys_alloc_opt */#define SYS_ALLOC_OPT_TRIM_THRESHOLD 0#define SYS_ALLOC_OPT_TOP_PAD        1#define SYS_ALLOC_OPT_MMAP_THRESHOLD 2#define SYS_ALLOC_OPT_MMAP_MAX       3/* Default values to sys_alloc_opt options */#define ERTS_DEFAULT_TRIM_THRESHOLD  (128 * 1024)#define ERTS_DEFAULT_TOP_PAD         0#define ERTS_DEFAULT_MMAP_THRESHOLD  (128 * 1024)#define ERTS_DEFAULT_MMAP_MAX        64EXTERN_FUNCTION(int, sys_alloc_opt, (int, int));typedef struct {  Sint trim_threshold;  Sint top_pad;  Sint mmap_threshold;  Sint mmap_max;} SysAllocStat;EXTERN_FUNCTION(void, sys_alloc_stat, (SysAllocStat *));/* Block the whole system... */#define ERTS_BS_FLG_ALLOW_GC				(((Uint32) 1) << 0)#define ERTS_BS_FLG_ALLOW_IO				(((Uint32) 1) << 1)/* Activities... */typedef enum {    ERTS_ACTIVITY_UNDEFINED,	/* Undefined activity */    ERTS_ACTIVITY_WAIT,		/* Waiting */    ERTS_ACTIVITY_GC,		/* Garbage collecting */    ERTS_ACTIVITY_IO		/* I/O including message passing to erl procs */} erts_activity_t;#ifdef ERTS_SMPtypedef enum {    ERTS_ACT_ERR_LEAVE_WAIT_UNLOCKED,    ERTS_ACT_ERR_LEAVE_UNKNOWN_ACTIVITY,    ERTS_ACT_ERR_ENTER_UNKNOWN_ACTIVITY} erts_activity_error_t;typedef struct {    erts_smp_atomic_t do_block;    struct {	erts_smp_atomic_t wait;	erts_smp_atomic_t gc;	erts_smp_atomic_t io;    } in_activity;} erts_system_block_state_t;extern erts_system_block_state_t erts_system_block_state;int erts_is_system_blocked(erts_activity_t allowed_activities);void erts_block_me(void (*prepare)(void *), void (*resume)(void *), void *arg);void erts_register_blockable_thread(void);void erts_unregister_blockable_thread(void);void erts_note_activity_begin(erts_activity_t activity);voiderts_check_block(erts_activity_t old_activity,		 erts_activity_t new_activity,		 int locked,		 void (*prepare)(void *),		 void (*resume)(void *),		 void *arg);void erts_block_system(Uint32 allowed_activities);int erts_emergency_block_system(long timeout, Uint32 allowed_activities);void erts_release_system(void);void erts_system_block_init(void);void erts_set_activity_error(erts_activity_error_t, char *, int);#ifdef ERTS_ENABLE_LOCK_CHECKvoid erts_lc_activity_change_begin(void);void erts_lc_activity_change_end(void);int erts_lc_is_blocking(void);#define ERTS_LC_IS_BLOCKING \  (erts_smp_pending_system_block() && erts_lc_is_blocking())#endif#endif#define erts_smp_activity_begin(NACT, PRP, RSM, ARG)		\  erts_smp_set_activity(ERTS_ACTIVITY_UNDEFINED,		\			(NACT),					\			0,					\			(PRP),					\			(RSM),					\			(ARG),					\			__FILE__,				\			__LINE__)#define erts_smp_activity_change(OACT, NACT, PRP, RSM, ARG)	\  erts_smp_set_activity((OACT),					\			(NACT),					\			0,					\			(PRP),					\			(RSM),					\			(ARG),					\			__FILE__,				\			__LINE__)#define erts_smp_activity_end(OACT, PRP, RSM, ARG)		\  erts_smp_set_activity((OACT),					\			ERTS_ACTIVITY_UNDEFINED,		\			0,					\			(PRP),					\			(RSM),					\			(ARG),					\			__FILE__,				\			__LINE__)#define erts_smp_locked_activity_begin(NACT)			\  erts_smp_set_activity(ERTS_ACTIVITY_UNDEFINED,		\			(NACT),					\			1,					\			NULL,					\			NULL,					\			NULL,					\			__FILE__,				\			__LINE__)#define erts_smp_locked_activity_change(OACT, NACT)		\  erts_smp_set_activity((OACT),					\			(NACT),					\			1,					\			NULL,					\			NULL,					\			NULL,					\			__FILE__,				\			__LINE__)#define erts_smp_locked_activity_end(OACT)			\  erts_smp_set_activity((OACT),					\			ERTS_ACTIVITY_UNDEFINED,		\			1,					\			NULL,					\			NULL,					\			NULL,					\			__FILE__,				\			__LINE__)ERTS_GLB_INLINE int erts_smp_is_system_blocked(erts_activity_t allowed_activities);ERTS_GLB_INLINE void erts_smp_block_system(Uint32 allowed_activities);ERTS_GLB_INLINE int erts_smp_emergency_block_system(long timeout,						    Uint32 allowed_activities);ERTS_GLB_INLINE void erts_smp_release_system(void);ERTS_GLB_INLINE int erts_smp_pending_system_block(void);ERTS_GLB_INLINE void erts_smp_chk_system_block(void (*prepare)(void *),					       void (*resume)(void *),					       void *arg);ERTS_GLB_INLINE voiderts_smp_set_activity(erts_activity_t old_activity,		      erts_activity_t new_activity,		      int locked,		      void (*prepare)(void *),		      void (*resume)(void *),		      void *arg,		      char *file,		      int line);#if ERTS_GLB_INLINE_INCL_FUNC_DEF

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -