2#include3#include4#include5" />

亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

Linux系統編程:客戶端-服務器用FIFO進行通信

系統 1842 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系統編程:客戶端-服務器用FIFO進行通信


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

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

【本文對您有幫助就好】

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

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 欧美中文字幕一二三四区 | 欧美手机看片 | 老子理论不卡影院6080 | 久久综合久久综合九色 | 日韩天堂 | 亚洲国产精品a一区 | 狠狠色成人综合 | 250pp久久新 26uuu精品一区二区 | 久久99精品视免费看 | 成熟热自由日本语亚洲人 | 精品免费久久久久久久 | 东京99热| 玖玖中文 | 99国产高清久久久久久网站 | 亚洲国产综合精品中文字幕 | freexxxx性特大另类ww | 一级黄色α片 | 国产精品视频免费一区二区三区 | 久久精品国产一区二区三区肥胖 | 国产一区二区在线视频观看 | www.日日日| 久久久国产一区二区三区 | 成人免费视频在线观看 | 玖玖精品视频在线 | 国产毛片一区二区三区 | 亚洲高清国产一区二区三区 | 成人性生活免费视频 | 99热久久久久久久免费观看 | 国产亚洲福利精品一区 | 青青青在线视频人视频在线 | 伊人久久欧美综合精品 | 欧美黄色免费网址 | 欧美久久久久欧美一区 | 91在线看片一区国产 | 日本黄色视 | 草草影院国产第一页 | 亚洲欧美精品一区二区 | 末成年一级在线看片 | 一区二区三区鲁丝不卡麻豆 | 国产网站麻豆精品视频 | 一级香蕉视频在线观看 |