Tag: 表示

在信号处理的上下文中,究竟哪些变量需要是sig_atomic_t?

这是一个使用volatile sig_atomic_t的简单玩具程序。 #include #include #include #include #define UNUSED(x) (void) (x) volatile sig_atomic_t quit; void sigusr1_handler(int sig) { UNUSED(sig); write(1, “handler\n”, 8); quit = 1; } int main() { struct sigaction sa; sa.sa_handler = sigusr1_handler; sa.sa_flags = 0; sigemptyset(&sa.sa_mask); if (sigaction(SIGUSR1, &sa, NULL) == -1) { perror(“sigaction”); return 1; } quit = 0; while (!quit) ; […]

Windows控制台应用程序 – 关闭事件的信号

在Windows控制台应用程序中,可以使用以下命令按住ctrl+c : #include #include void SigInt_Handler(int n_signal) { printf(“interrupted\n”); } int main(int n_arg_num, const char **p_arg_list) { signal(SIGINT, &SigInt_Handler); getchar(); // wait for user intervention } 这很有效,除非用户按下关闭控制台窗口的十字×根本不起作用。 那有什么信号吗? 我需要这个的原因是我有这个CUDA应用程序,如果在计算某些东西时关闭,它会导致计算机崩溃。 代码是多平台的,所以我更喜欢使用信号而不是SetConsoleCtrlHandler 。 有办法吗?

Readline:获取SIGINT的新提示

我使用readline获得了类似于以下的代码: #include #include #include #include #include #include #include #include #include void handle_signals(int signo) { if (signo == SIGINT) { printf(“You pressed Ctrl+C\n”); } } int main (int argc, char **argv) { //printf(“path is: %s\n”, path_string); char * input; char * shell_prompt = “i-shell> “; if (signal(SIGINT, handle_signals) == SIG_ERR) { printf(“failed to register interrupts with […]

在C中显示数字的二进制表示?

可能重复: 是否有printf转换器以二进制格式打印? 还在学习C和我在想: 给定一个数字,是否可以执行以下操作? char a = 5; printf(“binary representation of a = %b”,a); > 101 或者我是否必须编写自己的方法来转换为二进制?

使用write或async-safe函数从信号处理程序中打印int

我想在信号处理程序内使用write (或任何async-safe函数)将数字打印到日志或终端中。 我宁愿不使用缓冲I / O. 是否有一种简单而推荐的方法可以做到这一点? 例如,代替printf ,我更喜欢write (或任何asyn安全function)。 void signal_handler(int sig) { pid_t pid; int stat; int old_errno = errno; while((pid = waitpid(-1, &stat, WNOHANG)) > 0) printf(“child %d terminated\n”, pid); errno = old_errno; return; } 打印字符串很容易。 我可以使用(无需打印pid )代替上面的printf : write(STDOUT_FILENO, “child terminated”, 16);