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)


Egijbl  2023-01-27 15:35:57 From 127.0.0.1

gambling sites online casinos for usa players order generic tadalafil 20mg


Vmtfdz  2023-03-10 16:23:56 From 127.0.0.1

minocycline 100mg pill buy minocin 50mg without prescription cheap terazosin 5mg


Lgkarl  2023-04-01 05:37:16 From 127.0.0.1

viagra order online pharmacy tadalafil cialis for women


Jsxyps  2023-04-10 17:48:50 From 127.0.0.1

tadalafil usa tadalafil 10mg buy ed pills uk


Vxvvuy  2023-05-28 01:15:00 From 127.0.0.1

purchase mesalamine generic astelin 10 ml sprayers cheap avapro 150mg


Tixbvq  2023-06-11 22:11:10 From 127.0.0.1

lopressor online buy metoprolol paypal medrol 4mg over counter


Ussifi  2023-06-23 12:57:16 From 127.0.0.1

buy robaxin generic robaxin uk order sildenafil 50mg pill


OKBet  2023-07-11 09:33:56 From 127.0.0.1

Thanks for sharing with us this important Content. I feel strongly about it and really enjoyed learning more about this topic. OKBet


Psqici  2023-07-13 13:35:44 From 127.0.0.1

buy generic dapsone for sale adalat drug perindopril price


OKBet  2023-07-19 07:15:33 From 127.0.0.1

There’s no doubt i would fully rate it after i read what is the idea about this article. You did a nice job. pba odds betting