2#include3#include4#include5" />

日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

Linux系統(tǒng)編程:客戶端-服務器用FIFO進行通信

系統(tǒng) 2009 0

先放下代碼? 回來在解釋

頭文件:

clientinfo.h

      
        1
      
      
        struct
      
      
         CLIENTINFO{


      
      
        2
      
      
        char
      
       myfifo[
      
        500
      
      
        ];


      
      
        3
      
      
        int
      
      
         leftarg;


      
      
        4
      
      
        int
      
      
         rightarg;


      
      
        5
      
      
        char
      
      
         op;


      
      
        6
      
      
        }; 


      
      
        7
      
       typedef 
      
        struct
      
       CLIENTINFO CLIENTINFO, *CLINTINFOPTR;
    


client.c

      
         1
      
       #include <unistd.h>


      
         2
      
       #include <stdio.h>


      
         3
      
       #include <stdlib.h>


      
         4
      
       #include <
      
        string
      
      .h>


      
         5
      
       #include <sys/types.h>


      
         6
      
       #include <fcntl.h>


      
         7
      
       #include <signal.h>


      
         8
      
       #include 
      
        "
      
      
        clientinfo.h
      
      
        "
      
      
         9
      
      
        10
      
      
        #define
      
       FIFO_NAME "/home/levi/chatapplication/data/server_fifo/chat_server_fifo"


      
        11
      
      
        #define
      
       BUFF_SZ 100


      
        12
      
      
        13
      
      
        char
      
      
         mypipename[BUFF_SZ];


      
      
        14
      
      
        void
      
       handler(
      
        int
      
      
         sig){


      
      
        15
      
      
            unlink(mypipename);


      
      
        16
      
           exit(
      
        1
      
      
        );


      
      
        17
      
      
        }


      
      
        18
      
      
        19
      
      
        int
      
       main(
      
        int
      
       argc, 
      
        char
      
      
        const
      
       *
      
        argv[])


      
      
        20
      
      
        {


      
      
        21
      
      
        int
      
      
         res;


      
      
        22
      
      
        int
      
      
         fifo_fd, my_fifo;


      
      
        23
      
      
        int
      
      
         fd;


      
      
        24
      
      
            CLIENTINFO info;


      
      
        25
      
      
        char
      
      
         buffer[BUFF_SZ];


      
      
        26
      
      
        27
      
      
            signal(SIGKILL, handler);


      
      
        28
      
      
            signal(SIGINT, handler);


      
      
        29
      
      
            signal(SIGTERM, handler);


      
      
        30
      
      
        31
      
      
        if
      
      (argc != 
      
        4
      
      
        ){


      
      
        32
      
               printf(
      
        "
      
      
        Usage: %s op1 operation op2\n
      
      
        "
      
      , argv[
      
        0
      
      
        ]);


      
      
        33
      
               exit(
      
        1
      
      
        );


      
      
        34
      
      
            }


      
      
        35
      
      
        if
      
      (access(FIFO_NAME, F_OK) == -
      
        1
      
      
        ){


      
      
        36
      
               printf(
      
        "
      
      
        Could not open FIFO %s\n
      
      
        "
      
      
        , FIFO_NAME);


      
      
        37
      
      
                exit(EXIT_FAILURE);


      
      
        38
      
      
            }


      
      
        39
      
           fifo_fd =
      
         open(FIFO_NAME, O_WRONLY);


      
      
        40
      
      
        if
      
      (fifo_fd == -
      
        1
      
      
        ){


      
      
        41
      
               printf(
      
        "
      
      
        Could not open %s for write access\n
      
      
        "
      
      
        , FIFO_NAME);


      
      
        42
      
      
                exit(EXIT_FAILURE);


      
      
        43
      
      
            }


      
      
        44
      
           sprintf(mypipename, 
      
        "
      
      
        /home/levi/chat_client_%d_fifo
      
      
        "
      
      
        , getpid());


      
      
        45
      
           res = mkfifo(mypipename, 
      
        0777
      
      
        );


      
      
        46
      
      
        if
      
      (res != 
      
        0
      
      
        ){


      
      
        47
      
               printf(
      
        "
      
      
        FIFO %s was not created\n
      
      
        "
      
      
        , buffer);


      
      
        48
      
      
                exit(EXIT_FAILURE);


      
      
        49
      
      
            }


      
      
        50
      
      
        51
      
           my_fifo = open(mypipename, O_RDONLY |
      
         O_NONBLOCK);


      
      
        52
      
      
        if
      
      (my_fifo == -
      
        1
      
      
        ){


      
      
        53
      
               printf(
      
        "
      
      
        Could not open %s for read only access\n
      
      
        "
      
      
        , FIFO_NAME);


      
      
        54
      
      
                exit(EXIT_FAILURE);


      
      
        55
      
      
            }


      
      
        56
      
      
        57
      
      
            strcpy(info.myfifo, mypipename);


      
      
        58
      
           info.leftarg = atoi(argv[
      
        1
      
      
        ]);


      
      
        59
      
           info.op = argv[
      
        2
      
      ][
      
        0
      
      
        ];


      
      
        60
      
           info.rightarg = atoi(argv[
      
        3
      
      
        ]);


      
      
        61
      
      
        62
      
           write(fifo_fd, &info, 
      
        sizeof
      
      
        (CLIENTINFO));


      
      
        63
      
      
            close(fifo_fd);


      
      
        64
      
      
        65
      
           memset(buffer, 
      
        '
      
      
        \0
      
      
        '
      
      
        , BUFF_SZ);


      
      
        66
      
      
        while
      
      (
      
        1
      
      
        ){


      
      
        67
      
               res =
      
         read(my_fifo, buffer, BUFF_SZ);


      
      
        68
      
      
        if
      
      (res > 
      
        0
      
      
        ){


      
      
        69
      
                   printf(
      
        "
      
      
        Received from server : %s\n
      
      
        "
      
      
        , buffer);


      
      
        70
      
      
        break
      
      
        ;


      
      
        71
      
      
                }


      
      
        72
      
      
            }


      
      
        73
      
           printf(
      
        "
      
      
        Client %d is terminating\n
      
      
        "
      
      
        , getpid());


      
      
        74
      
      
            close(my_fifo);


      
      
        75
      
           (
      
        void
      
      
        )unlink(mypipename);


      
      
        76
      
      
        return
      
      
        0
      
      
        ;


      
      
        77
      
       }
    

?

server.c

      
         1
      
       #include <unistd.h>


      
         2
      
       #include <stdio.h>


      
         3
      
       #include <stdlib.h>


      
         4
      
       #include <
      
        string
      
      .h>


      
         5
      
       #include <sys/types.h>


      
         6
      
       #include <fcntl.h>


      
         7
      
       #include <signal.h>


      
         8
      
       #include 
      
        "
      
      
        clientinfo.h
      
      
        "
      
      
         9
      
      
        10
      
      
        #define
      
       FIFO_NAME "/home/levi/server_fifo/chat_server_fifo"


      
        11
      
      
        void
      
       handler(
      
        int
      
      
         sig){


      
      
        12
      
      
            unlink(FIFO_NAME);


      
      
        13
      
           exit(
      
        1
      
      
        );


      
      
        14
      
      
        }


      
      
        15
      
      
        16
      
      
        int
      
      
         calc(CLIENTINFOPTR info){


      
      
        17
      
      
        switch
      
      (info->
      
        op){


      
      
        18
      
      
        case
      
      
        '
      
      
        +
      
      
        '
      
       : 
      
        return
      
       info->leftarg + info->
      
        rightarg;


      
      
        19
      
      
        case
      
      
        '
      
      
        -
      
      
        '
      
       : 
      
        return
      
       info->leftarg - info->
      
        rightarg;


      
      
        20
      
      
        case
      
      
        '
      
      
        *
      
      
        '
      
       : 
      
        return
      
       info->leftarg * info->
      
        rightarg;


      
      
        21
      
      
        case
      
      
        '
      
      
        /
      
      
        '
      
       : 
      
        return
      
       info->leftarg / info->
      
        rightarg;


      
      
        22
      
      
            }


      
      
        23
      
      
        return
      
      
        0
      
      
        ;


      
      
        24
      
      
        }


      
      
        25
      
      
        26
      
      
        int
      
       main(
      
        int
      
       argc, 
      
        char
      
      
        const
      
       *
      
        argv[])


      
      
        27
      
      
        {


      
      
        28
      
      
        int
      
      
         res, i, fifo_fd, fd1;


      
      
        29
      
      
            CLIENTINFO info;


      
      
        30
      
      
        char
      
       buffer[
      
        100
      
      
        ];


      
      
        31
      
      
            signal(SIGKILL, handler);


      
      
        32
      
      
            signal(SIGINT, handler);


      
      
        33
      
      
            signal(SIGTERM, handler);


      
      
        34
      
      
        if
      
      (access(FIFO_NAME, F_OK) == -
      
        1
      
      
        ){


      
      
        35
      
               res = mkfifo(FIFO_NAME, 
      
        0777
      
      
        );


      
      
        36
      
      
        if
      
      (res != 
      
        0
      
      
        ){


      
      
        37
      
                   printf(
      
        "
      
      
        FIFO %s was not created\n
      
      
        "
      
      
        , FIFO_NAME);


      
      
        38
      
      
                    exit(EXIT_FAILURE);


      
      
        39
      
      
                }


      
      
        40
      
      
            }


      
      
        41
      
           fifo_fd =
      
         open(FIFO_NAME, O_RDONLY);


      
      
        42
      
      
        if
      
      (fifo_fd == -
      
        1
      
      
        ){


      
      
        43
      
               printf(
      
        "
      
      
        Could not open %s for read only access\n
      
      
        "
      
      
        , FIFO_NAME);


      
      
        44
      
      
                exit(EXIT_FAILURE);


      
      
        45
      
      
            }


      
      
        46
      
           printf(
      
        "
      
      
        \nServer is rarin to go !\n
      
      
        "
      
      
        );


      
      
        47
      
      
        while
      
      (
      
        1
      
      
        ){


      
      
        48
      
               res = read(fifo_fd, &info, 
      
        sizeof
      
      
        (CLIENTINFO));


      
      
        49
      
      
        if
      
      (res != 
      
        0
      
      
        ){


      
      
        50
      
                   printf(
      
        "
      
      
        Client arrived!!\n
      
      
        "
      
      
        );


      
      
        51
      
                   sprintf(buffer, 
      
        "
      
      
        The result is %d
      
      
        "
      
      , calc(&
      
        info));


      
      
        52
      
                   fd1 = open(info.myfifo, O_WRONLY |
      
         O_NONBLOCK);


      
      
        53
      
                   write (fd1, buffer, strlen(buffer) + 
      
        1
      
      
        );


      
      
        54
      
      
                    close(fd1);


      
      
        55
      
      
                }


      
      
        56
      
      
        57
      
      
            }


      
      
        58
      
      
        return
      
      
        0
      
      
        ;


      
      
        59
      
       }
    


OK!

./server.c &

./client 3 + 5

  看輸出吧!

?

?

Linux系統(tǒng)編程:客戶端-服務器用FIFO進行通信


更多文章、技術交流、商務合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 琼结县| 崇信县| 巩义市| 沁水县| 沂水县| 华坪县| 广南县| 贞丰县| 连州市| 祁阳县| 大安市| 班戈县| 乡城县| 济南市| 徐汇区| 浠水县| 海兴县| 临西县| 东乡县| 白河县| 保德县| 霍林郭勒市| 武安市| 芜湖市| 婺源县| 灵山县| 兴文县| 库车县| 宁武县| 五台县| 乾安县| 建昌县| 乌拉特前旗| 方山县| 徐水县| 九龙坡区| 天峨县| 长丰县| 保定市| 通海县| 灯塔市|