BBS水木清华站∶精华区

发信人: althea (稻草人), 信区: Linux        
标  题: [part 2] epserver.c 
发信站: BBS 水木清华站 (Fri Dec 29 23:46:59 2000) 
 
#include <unistd.h> 
#include <sys/socket.h> 
#include <sys/un.h> 
#include <stdio.h> 
#include <stdlib.h> 
#include <errno.h> 
#include <signal.h> 
 
#define MAX_NAME_LENGTH         64 
#define DISPLAY_LENGTH          64 
 
char socket_file_name[MAX_NAME_LENGTH]; 
 
int make_named_socket (const char *filename) 

    struct sockaddr_un name; 
    int sock; 
    size_t size; 
 
    /* Create the socket. */ 
    sock = socket (PF_LOCAL, SOCK_DGRAM, 0); 
    if (sock < 0) 
    { 
        perror ("socket"); 
        exit (EXIT_FAILURE); 
    } 
 
    /* Bind a name to the socket. */ 
    name.sun_family = AF_LOCAL; 
    strncpy (name.sun_path, filename, sizeof (name.sun_path)); 
 
    size = SUN_LEN (&name); 
 
    if (bind (sock, (struct sockaddr *) &name, size) < 0) 
    { 
        perror ("bind"); 
        exit (EXIT_FAILURE); 
    } 
 
    return sock; 

 
void delete_socket (int sig) 

    signal (sig, SIG_DFL); 
    unlink (socket_file_name); 
    kill (getpid (), sig); 

 
void handle_signals () 

    signal (SIGHUP, delete_socket); 
    signal (SIGINT, delete_socket); 
    signal (SIGQUIT, delete_socket); 
    signal (SIGILL, delete_socket); 
    signal (SIGTRAP, delete_socket); 
    signal (SIGABRT, delete_socket); 
    signal (SIGFPE, delete_socket); 
    signal (SIGSEGV, delete_socket); 
    signal (SIGTERM, delete_socket); 

 
 
int main () 

    int status, socket, nbytes; 
    char display_name[DISPLAY_LENGTH]; 
 
    snprintf (socket_file_name, MAX_NAME_LENGTH, "/tmp/ep-%d", (int) geteuid()); 
    handle_signals (); 
    socket = make_named_socket(socket_file_name); 
 
    while (1) { 
        if ((nbytes = read (socket, display_name, DISPLAY_LENGTH)) < 0) { 
            if (nbytes == EINTR) continue; 
            perror ("read"); 
            exit (EXIT_FAILURE); 
        } 
 
        write (STDOUT_FILENO, display_name, nbytes); 
    } 
 
    return 0; 

 
 
 
-- 
Look Ma, this man can twist his fingers as if they were made of rubber, 
isn't that amazing? -- Not really, he's been using emacs for years...! 
 
 
※ 来源:·BBS 水木清华站 smth.org·[FROM: 162.105.203.100] 

BBS水木清华站∶精华区