- 浏览: 228491 次
- 性别:
- 来自: 北京
最新评论
-
qq452739204:
如果构造的报文大于mtu值,是否需要分片之后再发送出去列?
Linux内核构造数据包并发送(二)(dev_queue_xmit方式) -
xingzengmou:
你好,我搞的原理跟你差不多,但播放的时候有papapa的声音, ...
AudioRecord和AudioTrack类的使用 -
wenjiefeng:
楼主,你有录制pcm格式和播放pcm格式的录音器的demo吗, ...
AudioRecord和AudioTrack类的使用 -
lovepeakingA:
...
AudioRecord和AudioTrack类的使用 -
ZaneLee007:
假的,不学无术
Android禁用键盘的所有按键
This is a template for a Linux daemon written in C. It includes:
- Command-line argument handling via getopt
- Signal Handling
- Syslog output and filtering via setlogmask
- Forking of process
- Changing of file mode mask
- Setting of Session ID
- Closing of STDOUT, STDIN, and STDERR
The following code can be compiled using the following command (assuming gcc):
gcc -DDEBUG -o daemonname downloaded_file.c
The code:
/* * Example daemon shell code for all of the requirements of a basic * linux daemon written in C. * * To use this code, search for 'TODO' and follow the directions. * * To compile this file: * gcc -o [daemonname] thisfile.c * * Substitute gcc with cc on some platforms. * * Peter Lombardo (peter AT lombardo DOT info) * 5/1/2006 * */ #include <sys /types.h> #include </sys><sys /stat.h> #include <stdio .h> #include <stdlib .h> #include <fcntl .h> #include <errno .h> #include <unistd .h> #include <syslog .h> #include <string .h> #include <assert .h> #include <signal .h> // TODO: Change '[daemonname]' to the name of _your_ daemon #define DAEMON_NAME "[daemonname]" #define PID_FILE "/var/run/[daemonname].pid" /************************************************************************** Function: Print Usage Description: Output the command-line options for this daemon. Params: @argc - Standard argument count @argv - Standard argument array Returns: returns void always **************************************************************************/ void PrintUsage(int argc, char *argv[]) { if (argc >=1) { printf("Usage: %s -h -nn", argv[0]); printf(" Options:n"); printf(" -ntDon't fork off as a daemon.n"); printf(" -htShow this help screen.n"); printf("n"); } } /************************************************************************** Function: signal_handler Description: This function handles select signals that the daemon may receive. This gives the daemon a chance to properly shut down in emergency situations. This function is installed as a signal handler in the 'main()' function. Params: @sig - The signal received Returns: returns void always **************************************************************************/ void signal_handler(int sig) { switch(sig) { case SIGHUP: syslog(LOG_WARNING, "Received SIGHUP signal."); break; case SIGTERM: syslog(LOG_WARNING, "Received SIGTERM signal."); break; default: syslog(LOG_WARNING, "Unhandled signal (%d) %s", strsignal(sig)); break; } } /************************************************************************** Function: main Description: The c standard 'main' entry point function. Params: @argc - count of command line arguments given on command line @argv - array of arguments given on command line Returns: returns integer which is passed back to the parent process **************************************************************************/ int main(int argc, char *argv[]) { #if defined(DEBUG) int daemonize = 0; #else int daemonize = 1; #endif // Setup signal handling before we start signal(SIGHUP, signal_handler); signal(SIGTERM, signal_handler); signal(SIGINT, signal_handler); signal(SIGQUIT, signal_handler); int c; while( (c = getopt(argc, argv, "nh|help")) != -1) { switch(c){ case 'h': PrintUsage(argc, argv); exit(0); break; case 'n': daemonize = 0; break; default: PrintUsage(argc, argv); exit(0); break; } } syslog(LOG_INFO, "%s daemon starting up", DAEMON_NAME); // Setup syslog logging - see SETLOGMASK(3) #if defined(DEBUG) setlogmask(LOG_UPTO(LOG_DEBUG)); openlog(DAEMON_NAME, LOG_CONS | LOG_NDELAY | LOG_PERROR | LOG_PID, LOG_USER); #else setlogmask(LOG_UPTO(LOG_INFO)); openlog(DAEMON_NAME, LOG_CONS, LOG_USER); #endif /* Our process ID and Session ID */ pid_t pid, sid; if (daemonize) { syslog(LOG_INFO, "starting the daemonizing process"); /* Fork off the parent process */ pid = fork(); if (pid < 0) { exit(EXIT_FAILURE); } /* If we got a good PID, then we can exit the parent process. */ if (pid > 0) { exit(EXIT_SUCCESS); } /* Change the file mode mask */ umask(0); /* Create a new SID for the child process */ sid = setsid(); if (sid < 0) { /* Log the failure */ exit(EXIT_FAILURE); } /* Change the current working directory */ if ((chdir("/")) < 0) { /* Log the failure */ exit(EXIT_FAILURE); } /* Close out the standard file descriptors */ close(STDIN_FILENO); close(STDOUT_FILENO); close(STDERR_FILENO); } //**************************************************** // TODO: Insert core of your daemon processing here //**************************************************** syslog(LOG_INFO, "%s daemon exiting", DAEMON_NAME); //**************************************************** // TODO: Free any allocated resources before exiting //**************************************************** exit(0); }
发表评论
-
ARP头
2010-12-01 17:20 1255ifndef _NET_IF_ARP_H_ #d ... -
自己用libpcap来抓包
2010-12-01 16:40 6963#define APP_NAME &quo ... -
MAC文本格式地址to网络字节序
2010-12-01 16:38 2143#include <sys/types.h& ... -
C语言实现修改IE浏览器的代理设置
2010-11-24 17:18 4629写了一个用C语言实现修 ... -
[转]通过例子学习Lua
2010-11-17 21:25 4759据说本文作者是OGDEV的HACK达人 通过例子学习 ... -
size_t和ssize_t类型
2010-10-22 10:11 1740size_t 是为了方便系统之间的移植而定义的在32位系统 ... -
高速网络环境下基于零拷贝的报文捕获机制
2010-10-19 09:07 4769参看: http://www.linuxjo ... -
sendfile() -- 通过 socket 拷贝文件
2010-10-19 08:53 2709原型: #include <sys/sendfi ... -
零拷贝与 sendfile
2010-10-19 08:47 3725最近在搞zerocopy的东西,看到了这篇文章,拷过来备用! ... -
C++队列实现和队列简介
2010-10-09 11:04 2854队列简介: 队列(Queue)是一种数据结构,可以在队 ... -
定长队列写入文件并读取
2010-10-09 10:57 1392#include "stdio.h" ... -
循环队列
2010-10-09 10:55 1684相信绝大多数都学习过《数据结构》这门课程,而对这门课程里 ... -
自动、静态、 寄存器、易失变量的区别
2010-09-30 08:08 1596自动变量 什么是 ... -
stdarg.h
2010-09-27 09:12 1822stdarg.h是C语言中C标 ... -
extern用法详解
2010-09-27 08:33 13961 基本解释 extern ... -
给线程变量pthread_t *thread动态分配空间
2010-09-26 08:36 3152线程的创建是用下面的几个函数来实现的. #inc ... -
typedef 的用法
2010-09-25 20:43 934用途一: 定义一种类型的别名,而不只是简单 ... -
编写守护进程
2010-09-17 10:43 911#include <stdio.h> #incl ... -
抓包程序的包存储队列
2010-09-17 09:08 807typedef struct _Node { in ... -
浅谈C中的malloc和free
2010-09-03 19:37 904在C语言的学习中,对内存管理这部分的知识掌握尤其重要!之前对C ...
相关推荐
根据《linux/UNIX系统编程手册》的daemon章节写的一个测试become_daemon()函数程序。代码内容99%以上都是书上给的源码。...修改了 makefile文件,makefile.inc 文件未使用;修改了 ***.h> 的路径。
在本文档中,我们讨论的是一个使用C语言在Linux环境下编写的简单telnet服务器程序。这个服务器不包含用户名和密码验证机制,因此任何连接到该服务的用户将被视为服务启动者的身份登录系统。以下是该程序的一些关键...
总结来说,将Bumblebee daemon和client重写为C语言是为了利用C语言的高效性和底层控制能力,以优化NVIDIA Optimus显卡在Linux环境下的性能。这一改动不仅提升了系统的响应速度,还降低了资源消耗,为用户提供了更好...
在Linux中专门提供了一个函数来完成这个daemon化的过程,这个函数的原型如下 int daemon (int __nochdir, int __noclose); 如果__nochdir的值为0,则将切换工作目录为根目录;如果__noclose为0,则将标准输入...
The Linux® Networking Architecture: Design and Implementation of Network Protocols in the Linux Kernel By Klaus Wehrle, Frank Pählke, Hartmut Ritter, Daniel Müller, Marc Bechler Publisher :...
本文档提供了一份在Linux环境下使用C语言编写的简单Telnet服务器源代码。该服务器主要用于教学目的和实验环境搭建,允许用户通过网络进行远程登录与交互。 #### 二、关键库文件及功能介绍 1. **`<stdarg.h>`**:...
这时我们并没有真正的安装上了VMWARE TOOLS软件包,如果您点击菜单:DEVICES,您就会发现光驱的菜单文字变为:ide1:0-> C:\Program Files\VMware\VMware Workstation\Programs\linux.iso,这表示VMWARE将LINUX的ISO...
3a*8*daemon init 幸*启动配置文件当中的需要守护的程序 执行成功返回1,中途出错,返回-1 长界零家墨军零家零率家三哮零座零率零零容岸军零罕型率零零零零牢察座察零零零零季球军零容零 int moniter_ run(struct proc...
在Linux环境下,通常使用C、Python、Perl或其他支持后台运行的编程语言来编写。守护进程应具备以下特性: 1. 与终端分离:守护进程不应有控制终端,通常通过调用`fork()`两次实现。 2. 改变工作目录:从根目录`/`...
rm /home/wwt/linux_r16/lichee/out/sun8iw5p1/linux/common/buildroot/build/buildroot-config/zconf.tab.c make[1]:正在离开目录 `/home/wwt/linux_r16/lichee/buildroot/package/config' # # configuration ...
tar -zxvf mongodb-linux-i686-3.2.3.tgz -C /usr/local/ ``` 然后,创建一个软链接以便于管理: ```bash sudo ln -s /usr/local/mongodb-linux-i686-3.2.3 /usr/local/mongodb ``` 步骤5:配置MongoDB 创建一个...
Linux 提供服务是由运行在后台的守护程序(daemon)来执行的。守护进程的工作就是打开一个端口(port),等待(listen)进入的连接。在 C/S 模式中,如果客户提请了一个连接,守护进程就创建(fork)子进程来响应这...
在Linux环境下,Relax作为一个守护进程(daemon)运行,持续监控系统的资源使用情况。当系统负载较低时,Relax会智能地降低CPU的运行频率,减少功率消耗;当系统需要处理更多任务时,它又会迅速提升CPU速度以保证...
为了更好地理解这些概念,你可以参考《Advanced Programming in the UNIX Environment》(APUE)等经典书籍,以及man手册页,这些都是学习Linux进程控制的重要资源。同时,实践操作也是不可或缺的一部分,尝试编写...
43. **cpp (C PreProcessor)**:C语言预处理器。 44. **cron (Chronos ϣʱ)**:定时任务调度程序。 45. **cups (Common Unix Printing System)**:Unix/Linux系统中的打印系统。 46. **cvs (Current Version System...
- `-c`:发送指定次数的ECHO_REQUEST数据包后退出。 #### reboot - Restartyourcomputer - **全称**: Restart your computer - **用途**: 重启计算机。 - **语法**: `reboot` #### sudo - Superuser do/bin=...
cpp(C Pre Processor)是一个C语言的预处理器(pre-processor)。 #### cron=Chronos cron(Chronos)是一个定时任务计划程序(scheduled task program)。 #### cups=CommonUnixPrintingSystem CUPS(Common Unix ...
rm /home/wwt/linux_r16/lichee/out/sun8iw5p1/linux/common/buildroot/build/buildroot-config/zconf.tab.c make[1]:正在离开目录 `/home/wwt/linux_r16/lichee/buildroot/package/config' # # configuration ...
sudo tar -zxvf mongodb-linux-x86_64-3.4.2.tgz -C /usr/local/ ``` 解压完成后,会生成一个名为`mongodb-linux-x86_64-3.4.2`的目录,通常我们可以将其重命名为更简洁的`mongodb`: ```bash sudo mv /usr/local/...