相关疑难解决方法(0)

为什么将未使用的函数参数值转换为void?

在一些C项目中,我看到了这段代码:

static void *l_alloc (void *ud, void *ptr, size_t osize, size_t nsize) {
    (void)ud;
    (void)osize;
    /* some code not using `ud` or `osize` */
    return ptr;
}
Run Code Online (Sandbox Code Playgroud)

这两个演员是否有任何目的?

c casting void

93
推荐指数
2
解决办法
2万
查看次数

如何通过从键盘获取任何值来打破Linux上的C循环?

我正在构建的程序在无限循环中运行,其中包含一个开关盒.我想在每种情况下插入一个while循环并在循环中执行一些操作,但是一旦给出键盘输入,循环就应该退出.因此,在从键盘获取输入之后,另一个案例在其中嵌套了while循环,并且该过程继续.

结构是:

while()//infinite loop
    {
    ...............      //operations
    ...............      //operations
    switch()
        {
        case 1:
        ...............    //operations
        ...............    //operations
        while()//infinite loop
             {
             ..............
             ..............
             exit if there is any input from keyboard
             }
        break;

        case 2:
        ...............    //operations
        ...............    //operations
        while()//infinite loop
             {
             ..............
             ..............
             exit if there is any input from keyboard
             }
        break;


        case n:
        ...............    //operations
        ...............    //operations
        while()//infinite loop
             {
             ..............
             ..............
             exit if there is any input from keyboard
             }
        break;
        }
  }
Run Code Online (Sandbox Code Playgroud)

有什么办法吗???

c linux while-loop

5
推荐指数
2
解决办法
2723
查看次数

如何读取 Ctrl+C 作为输入

(在Linux中)

我找到的方法都是用的signal

难道就没有别的办法了吗?我能做些什么来让终端将其放入输入缓冲区吗?

c c++ linux terminal

3
推荐指数
1
解决办法
1155
查看次数

如何查明第三方是否杀死或破坏了 C++ 程序

我们知道,在Linux-Unix的世界里,我们可以在终端中用ctrl+C来中断前台运行的程序并结束程序。

在 C++ 中我如何知道第三方破坏或强制终止 ( kill -9) 程序?

我必须经常用线程检查某些东西吗?当程序被破坏时,我必须在程序中返回退出状态 130,当程序被终止时,我必须返回退出状态 140。

c++ unix linux status

2
推荐指数
1
解决办法
124
查看次数

如何在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);
}
Run Code Online (Sandbox Code Playgroud)

我该如何实施这种行为?我试过使此变量为全局变量,但无法在编译时调用此函数(错误:initializer元素不是编译时常量)。

c signals blocking sigint

1
推荐指数
1
解决办法
920
查看次数

使用ctrl-c防止C程序被杀死

可能重复:
在C中捕获Ctrl-C

我正在编写一个C命令行程序,并试图确保ctrl-c不会杀死它.我怎么能这样做的想法?

c

0
推荐指数
1
解决办法
4302
查看次数

在c程序中捕获Ctrl + c

我使用以下代码来捕获我的C程序中的Ctrl+ C:

   void sig_handler(int signo)
{

    if (signo == SIGINT) 
        exit(EXIT_SUCCESS);
}


void main ()
{
    ......

    if(signal(SIGINT, sig_handler)== SIG_ERR) 
        {
            printf(">>>>>>>>>>>>>>>>>>>>> SIG INT EROOR !!!! sigint=%d ID=%d \n",SIGINT, getpid());
        }
        else 
            printf(">>>>>>>>>>AFTER>>>>>>>>>>> SIG INT  sigint=%d PID=%d \n",SIGINT, getpid());


char *buf = NULL;
asprintf(&buf, "%d", getpid());
write(fd, buf, strlen(buf));
free(buf);
uloop_run(); //entering main loop

ubus_exit();
uloop_done();

xml_exit();
config_exit();

free(tmp);

closelog();

log_message(NAME, L_NOTICE, "exiting\n");
return 0;
}
Run Code Online (Sandbox Code Playgroud)

我的目的是捕捉Ctrl + C但似乎信号处理程序(sig_handler)不运行!怎么解决?

c linux openwrt

-2
推荐指数
1
解决办法
2040
查看次数

标签 统计

c ×6

linux ×4

c++ ×2

blocking ×1

casting ×1

openwrt ×1

sigint ×1

signals ×1

status ×1

terminal ×1

unix ×1

void ×1

while-loop ×1