linux多进程和libnotify桌面通知

Comments(48)


Posted on 2012-12-27 15:15:04 os


OS: ubuntu 12.04 x86_64

GCC: gcc 版本 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5)

#include <stdio.h>
#include <stdlib.h>
#include <getopt.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
#include <libnotify/notify.h>

void usage(char *);
int close_std();

char * const short_options = "hf:b:";

struct option long_options[] =
{
    {"help", 2, NULL, 'h'},
    {"file", 2, NULL, 'f'},
    {"body", 2, NULL, 'b'},
    {NULL, 0, NULL, 0},
};

char * player = "/usr/bin/mplayer";
char * music_file = "/usr/share/sounds/freedesktop/stereo/alarm-clock-elapsed.oga";
char * notify_body = "You have a new mail!";

void usage(char * program_name)
{
    printf("%s -h [--help]\n"
           "-f [--file=filename] path to music file.\n"
           "-b [--body=content] the body of notify dialog.\n", program_name);
    exit(1);
}

int close_std()
{
    if(close(STDIN_FILENO) == -1 || close(STDOUT_FILENO) ==-1 || close(STDERR_FILENO) == -1)
    {
        return -1;
    }

    return 0;
}

int main(int argc, char **argv)
{

    int c, pid;
    char * program_name = argv[0];

    while((c = getopt_long(argc, argv, short_options, long_options, NULL)) != -1)
    {
        switch(c)
        {
            case 'h':
                usage(program_name);

            case 'f':
                music_file = optarg;
                break;

            case 'b':
                notify_body = optarg;
                break;

            case '?':
                usage(program_name);

            default:
                usage(program_name);
        }
    }

    if((close_std() == -1))
    {
        perror("close_std()");
        exit(1);
    }

    //player music
    if((pid = fork()) < 0)
    {
        perror("fork()");
        exit(1);
    }
    else if(pid == 0)
    {
        if(execlp(player, player, music_file, (char *)0) < 0)
        {
            perror("execlp()");
            exit(1);
        }

        exit(0);
    }

    //send notify information to user
    if((pid = fork()) < 0)
    {
        perror("fork()");
    }
    else if(pid == 0)
    {
        notify_init("Mail");
        NotifyNotification * notify = notify_notification_new("Mail", notify_body, "Mail");
        notify_notification_show(notify, NULL);

        exit(0);
    }

    exit(0);
}

Makefile:

SRC_INCLUDE=-I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/gdk-pixbuf-2.0

CC=gcc
MOD_CFLAGS=-fPIC
CFLAGS=-g -O2 -DHAVE_CONFIG_H -DNSCORE
LDFLAGS=
LIBS=-lnotify 
DBG_FLAGS= -DDEBUG=1

OUT_PROGRAM= newmail_notify


all: main

main:
    $(CC) $(MOD_CFLAGS) $(CFLAGS) $(SRC_INCLUDE) -o $(OUT_PROGRAM) newmail_notify.c $(MOD_LDFLAGS) $(LDFLAGS) $(LIBS)
前一篇: 在tornado的异步http请求中托管一个阻塞的任务到线程池 后一篇: tornado长连接断开的处理机制

Captcha:
验证码

Email:

Content: (Support Markdown Syntax)


betflixsupervip  2023-08-08 15:25:47 From 127.0.0.1

Wow that was strange. I just wrote an very long comment but after I clicked submit my comment didn’t show up. Grrrr… well I’m not writing all that over again. Regardless, just wanted to say excellent blog!vbetflik vip


Uqjqsd  2023-08-14 09:19:40 From 127.0.0.1

order valaciclovir 1000mg generic purchase bactrim without prescription floxin 400mg cost


Qylawq  2023-08-28 06:17:01 From 127.0.0.1

buy dipyridamole cheap buy felodipine 5mg generic pravachol us


CrellSeaw  2023-10-13 12:45:24 From 127.0.0.1

Authors are indebted to the Indian Council of Medical Research for providing the financial grant no cialis buy


Vziczi  2023-11-16 05:47:59 From 127.0.0.1

oral aspirin 75mg burton brunette online blackjack live dealer


Jjkbca  2023-12-21 21:02:38 From 127.0.0.1

buy cabergoline 0.5mg for sale buy dostinex 0.5mg order generic dapoxetine


Xlcbky  2024-01-19 00:50:55 From 127.0.0.1

buy azithromycin 500mg pills buy azithromycin pill zithromax 500mg pills


Suorcp  2024-02-07 05:38:11 From 127.0.0.1

cheap prednisolone generic order prednisolone pill cost prednisolone


Duittu  2024-02-16 03:51:09 From 127.0.0.1

order triamcinolone 10mg sale brand triamcinolone cheap aristocort 10mg


Spdwel  2024-02-16 18:26:58 From 127.0.0.1

buy tadalafil tablets tadalafil 5mg ca order cialis 40mg