#include "monitor_user.h" #include #include #include #include #define DEVICE "/dev/variable_monitor" int file_desc = -1; /// @brief start watch /// @param w_arg /// @return 0 means success, other means fail int start_watch(watch_arg w_arg) { if (file_desc < 0) { file_desc = open(DEVICE, 0); } if (file_desc < 0) { printf("Can't open device file: %s\n", DEVICE); return -1; } if (ioctl(file_desc, 0, &w_arg) < 0) { printf("ioctl failed\n"); close(file_desc); return -1; } return 0; } /// @brief cancel watch /// @return 0 means success, other means fail int cancel_watch() { if (file_desc < 0) { file_desc = open(DEVICE, 0); } if (file_desc < 0) { printf("Device not open: %s,%d \n", DEVICE, file_desc); return file_desc; } close(file_desc); file_desc = -1; return 0; } void init_watch_arg(watch_arg *wg, char *name, void *ptr, int length_byte, long long threshold, unsigned char unsigned_flag, unsigned char above_threshold, unsigned long time_ns){ wg->task_id = getpid(); strncpy(wg->name, name, (MAX_NAME_LEN + 1)); wg->ptr = ptr; wg->length_byte = length_byte; wg->threshold = threshold; wg->unsigned_flag = unsigned_flag; wg->above_threshold = above_threshold; wg->time_ns = time_ns; }