Tag: 表示

我应该使用什么类型的C enum的二进制表示?

我知道C enum是无符号整数,但这可能因实现而异。 我应该在二进制表示中使用什么类型的枚举? * PS’二进制表示’表示字节数组。 我想将枚举值序列化为socket以与其他程序进行交互操作。

如何在SIGINT处理程序中清理本地数据

我需要在SIGINT处理程序中执行清理函数,但我无法将本地数据传递给它。 这是一个例子: int main(int argc, char *argv[]) { struct database *db = db_cursor(); sockfd_t master_socket = init_server(); signal(SIGINT, sigint_handler); while (1) { // accepting connections } } void sigint_handler(int s) { destroy_db(db); shutdown(master_socket, SHUT_RDWR); close(master_socket); exit(EXIT_SUCCESS); } 我该如何实现这种行为? 我试过让这个变量是全局的,但我不能在编译时调用这个函数(错误:初始化元素不是编译时常量)。

使用睡眠function时如何增加计数?

嘿伙计们,我好像迷路了。 我应该能够在无限循环内增加一个孩子的计数,并在父母每次发送一个信号时打印计数,这应该是每1秒。 我编写了我的代码,但我认为在使用fork之后,子进程和父进程同时运行,但事实并非如此,所以我不确定如何解决这个问题。 任何帮助都会很棒

使用睡眠并选择信号

我想使用select()函数等待1秒,因为我的程序使用信号来控制东西,所以sleep()会过早地返回。 奇怪的是,当使用select()它也会过早地返回。 我打电话选择这样的 struct timeval timeout; timeout.tv_sec = 10; timeout.tv_usec = 1000000; select (0 ,NULL, NULL, NULL, &timeout); 但每当信号到达时,它返回(我正在使用纳秒计时器作为信号) 谁知道为什么?

CTRL + C不会在Python中使用CTYPES中断对共享库的调用

当调用在C共享库(动态库)中执行的循环时,Python将不会收到KeyboardInterrupt,并且没有任何内容会响应(或处理)CTRL + C. 我该怎么办?

在C中停止getline

在这里,我正在尝试使用getline获取用户输入。 收到中断^C我希望它发出getline信号停止并继续使用我的程序而不是终止它。 我试图给stdin写一个换行符,但显然这不起作用。 fwrite(“\n”, 1, 1, stdin); 那么实现这一目标的方法是什么?

确定哪个信号导致EINTR?

我正在运行一个epoll循环,有时我对epoll_wait的调用返回-1,并将errno设置为EINTR。 有时,我想要结束epoll循环,就像SIGTERM或SIGINT一样。 但是我用-pg标志编译了这个代码,因此引发了周期性的SIGPROF(27)信号,停止了我的循环。 那么……是否可以打开百分号以便我可以确定何时退出而不是继续? 我想避免使用全局来跟踪最近发出的信号的任何事情。

在使用带有信号处理程序的multithreading程序时,有没有办法确保primefaces性?

如果我有这样的程序(伪代码): mutex_lock; func() { lock(mutex_lock); // Some code (long enough to make a // race condition if no proper synchronisation // is available). We also going to call a signal, // say, SIGINT, through (ctrl-c), while we are in // the range of locking and unlocking the lock. unlock(mutex_lock); } sig_handler_func(sig) { // Say, we […]

SIGCHLD是在Linux上的SIGCONT上发送的,而不是在macOS上发送的

在主要过程中,我听SIGCHLD: signal(SIGCHLD, &my_handler); 然后我fork() , execv()并让它在后台运行(例如/ bin / cat)。 当我尝试从终端向子进程发送SIGSTOP时, my_handler() 。 但是当我尝试向它发送SIGCONT时,处理程序不会在macOS上调用,而是在我的Ubuntu上执行。 人: SIGCHLD:儿童身份已发生变化。 我错过了什么吗? 这是预期的行为吗? 我在Ubuntu上编写了我的应用程序,并期望它也可以在mac上运行。 我也试过sigaction() ,但结果相同。 这是一个示例代码,用于演示: #include #include #include #include #include #include void my_handler(int signum) { printf(“\t SIGCHLD received\n”); fflush(stdout); } void my_kill(pid_t pid, int signum) { printf(“Sending %d\n”, signum); fflush(stdout); kill(pid, signum); printf(“Sent %d\n\n”, signum); fflush(stdout); } int main() […]

传递给C库的函数指针的C链接

我的情况非常简单:我希望我的C ++程序能够处理Unix信号。 为此,glibc在signal.h中提供了一个名为sigaction的函数,它希望接收一个函数指针作为它的第二个参数。 extern “C” { void uponSignal(int); } void uponSignal(int) { // set some flag to quit the program } static void installSignalHandler() { // initialize the signal handler static struct sigaction sighandler; memset( &sighandler, 0, sizeof(struct sigaction) ); sighandler.sa_handler = uponSignal; // install it sigaction( SIGINT, &sighandler, nullptr ); } 我的问题是: extern “C”链接说明符是否必要? […]