linux c开发: 在程序退出时进行处理

linux c开发: 在程序退出时进行处理,第1张

有时候,希望程序退出时能进行一些处理,比如保存状态,释放一些资源。c语言开发的linux程序,有可能正常退出(exit),有可能异常crash,而异常crash可能是响应了某信号的默认处理。这里总结一下这些情况,如何获取一个统一的退出处理的点,说白了就是写一个回调函数,让他在程序正常或异常退出时调用。

这个例子里面其实是将异常退出处理和正常退出处理结合起来了。对于SIGTERM(即kill进程)和SIGINT(即ctrl-c结束前台进程),我们当做是正常退出,在其信号处理函数里面,直接调用了exit(0),而exit(0)又会被server_on_exit捕获到。对于异常退出也是类似,只是调用了exit(-1)表示是异常的。同时异常退出我们会打印出当前的进程堆栈信息,server_backtrace的实现下一篇再说。另外注意的是SIGKILL信号是无法捕获的。而调用abort导致的退出,也是通过SIGABRT信号捕获到进行处理了。其他几种异常退出的信号也是比较常见,一并捕获到进行处理。这样对于异常退出,我们即可统一的log堆栈信息,又可直接继续正常退出时的处理流程了。

姓名:冯成 学号:19020100164 学院:丁香二号书院

转自:https://feixiaoxing.blog.csdn.net/article/details/7229483

【嵌牛导读】本文将介绍linux下的C语言开发中的管道通信

【嵌牛鼻子】linux C语言 管道通信

【嵌牛提问】linux下的C语言开发中的管道通信是什么?

Linux系统本身为进程间通信提供了很多的方式,比如说管道、共享内存、socket通信等。管道的使用十分简单,在创建了匿名管道之后,我们只需要从一个管道发送数据,再从另外一个管道接受数据即可。

#include <stdio.h>

#include <unistd.h>

#include <stdlib.h>

#include <string.h>

int pipe_default[2] 

int main()

{

    pid_t pid

    char buffer[32]

    memset(buffer, 0, 32)

    if(pipe(pipe_default) <0)

    {

        printf("Failed to create pipe!\n")

        return 0

    }

    if(0 == (pid = fork()))

    {

        close(pipe_default[1])

        sleep(5)

        if(read(pipe_default[0], buffer, 32) >0)

        {

            printf("Receive data from server, %s!\n", buffer)

        }

        close(pipe_default[0])

    }

    else

    {

        close(pipe_default[0])

        if(-1 != write(pipe_default[1], "hello", strlen("hello")))

        {

            printf("Send data to client, hello!\n")

        }

        close(pipe_default[1])

        waitpid(pid, NULL, 0)

    }

    return 1

}

    下面我们就可以开始编译运行了,老规矩分成两步骤进行:(1)输入gcc pipe.c -o pipe;(2)然后输入./pipe,过一会儿你就可以看到下面的打印了。

[test@localhost pipe]$ ./pipe

Send data to client, hello!

Receive data from server, hello!

在Linux开发环境下,GCC是进行C程序开发不可缺少的编译工具。GCC是GNU C Compile的缩写,是GNU/Linux系统下的标准C编译器。虽然GCC没有集成的开发环境,但堪称是目前效率很高的C/C++编译器。《linux就该这么学》非常值得您一看。Linux平台下C程序开发步骤如下:

1.利用编辑器把程序的源代码编写到一个文本文件中。

比如编辑test.c程序内容如下:

/*这是一个测试程序*/

#include<stdio.h>

int main(void)

{

printf("Hello Linux!")

}

2.用C编译器GCC编译连接,生成可执行文件。

$gcc test.c

编译完成后,GCC会创建一个名为a.out的文件。如果想要指定输出文件,可以使用选项-o,命令如下所示:

$gcc-o test1 test.c

这时可执行文件名就变为test1,而不是a.out。

3.用C调试器调试程序。

4.运行该可执行文件。 在此例中运行的文件是:

$./a.out 或者 test1

结果将得出:

Hello Linux!

除了编译器外,Linux还提供了调试工具GDB和程序自动维护工具Make等支持C语言编程的辅助工具。如果想要了解GCC的所有使用说明,使用以下命令:

$man gcc


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/6047962.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-12
下一篇 2023-03-12

发表评论

登录后才能评论

评论列表(0条)

保存