File: lw-ctl.c

package info (click to toggle)
loadwatch 1.0%2B1.1alpha1-8
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 236 kB
  • sloc: ansic: 1,004; sh: 175; makefile: 59
file content (74 lines) | stat: -rw-r--r-- 1,541 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/socket.h>
#include <sys/un.h>
#include <errno.h>

void send_cmd(char *sockname, char *cmd)
{
    int                 sock;
    struct sockaddr_un  addr;
    int                 total, tbw;

    fprintf(stderr, "sending '%s' on '%s'\n", cmd, sockname);

    if ((sock = socket(AF_UNIX, SOCK_STREAM, 0)) < 0)
    {
        perror("socket");
        exit(1);
    }

    addr.sun_family = AF_UNIX;
    strcpy(addr.sun_path, sockname);

    if (connect(sock, (struct sockaddr *)&addr, sizeof(addr)) < 0)
    {
        perror("connect");
        exit(1);
    }

    total = strlen(cmd);
    tbw = 0;
    while (tbw < total)
    {
        int bw;
        if ((bw = write(sock, cmd + tbw, total - tbw)) < 0)
        {
            switch (errno)
            {
            case EAGAIN:
            case EINTR:
                continue;

            default:
                close(sock);
                perror("socket");
                exit(1);
            }
        }
        tbw += bw;
    }

    close(sock);
    return;
}

int
main(int argc, char **argv)
{
    if (argc != 3)
    {
        fprintf(stderr, "usage: lw-ctl <control file> <command>\n"
                "\tcommand be one of:\n"
                "\tRUN: put loadwatch into sticky run mode\n"
                "\tSTOP: put loadwatch into sticky stop mode\n"
                "\tWATCH: put loadwatch into regular load watching mode\n");
    }
    else
    {
        send_cmd(argv[1], argv[2]);
    }

    return 0;
}