0

Daemon Programming について読みましたが、デバイスがオンラインかどうか (RS232、USB、イーサネット) を検出するためにこれが必要になると思います。次に、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 が接続されていないため、オフラインで印刷します。

デバイスを検出する別の方法はありますか?

ありがとう、

4

1 に答える 1

1

udev がある場合は、libudevを使用してデバイスを検出および監視できます。signal11から素敵なチュートリアルをチェックアウトしてください。

于 2012-09-26T08:32:50.183 に答える