与设备对话的守护进程程序

时间:2012-09-26 08:07:12

标签: linux linux-kernel embedded-linux

我读过关于守护程序编程的内容,我想如果在线或不在线,我会需要这个来检测我的设备,例如(RS232,usb,ethernet)。然后获取一个Web服务PHP。

此网站的代码。 http://www.netzmafia.de/skripten/unix/linux-daemon-howto.html

我添加了一些部件来测试我是否可以检测设备。

#include <sys/types.h>
#include <sys/stat.h>
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <errno.h>
#include <unistd.h>
#include <syslog.h>
#include <string.h>
int devfd;
int main(int argc, char *argv[]) {

        int c;


        while((c=getopt(argc,argv,"s")) != -1)
            switch(c){

            case 's': devfd = open("/dev/ttyUSB0", O_RDWR);
                        if(devfd==-1){
                        printf("offline\n");
                        }
                        else{
                        printf("online\n");
                        }
                        break;
            default: printf("Wrong command\n");

            }

        /* Our process ID and Session ID */
        pid_t pid, sid;

        /* 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);

        /* Open any logs here */        

        /* 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);
        }



        /* Daemon-specific initialization goes here */

        /* The Big Loop */
        while (1) {



        }
   exit(EXIT_SUCCESS);
}

我添加了此代码..

while((c=getopt(argc,argv,"s")) != -1)
            switch(c){

            case 's': devfd = open("/dev/ttyUSB0", O_RDWR);
                        if(devfd==-1){
                        printf("offline\n");
                        }
                        else{
                        printf("online\n");
                        }
                        break;
            default: printf("Wrong command\n");

            }

所以在终端这样做。

./ daemon -s //离线打印,因为设备USB0未连接。

我还有另一种检测设备的方法吗?

谢谢,

1 个答案:

答案 0 :(得分:1)

如果有udev,您可以使用libudev来检测和监控您的设备。查看来自signal11的精彩教程。