【问题标题】:Named Pipe client and server, message truncated on server?命名管道客户端和服务器,消息在服务器上被截断?
【发布时间】:2017-05-02 19:47:17
【问题描述】:

我有一个始终在运行的服务器,它创建一个日志文件,该文件通过命名管道接收一个参数并将其存储在 log.txt 文件中。

客户端通过参数向命名管道发送消息。

客户端我想它没问题,如果我 cat /tmp/talk 它在那里完整的消息,但在服务器上它只存储第一个字符。这是为什么呢?

还有一个更简单的问题,有没有更好的方法来实现服务器周期来检查管道?

客户

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

    char *myfifo = "/tmp/talk";     int fd,n;

    fd = open(myfifo,O_WRONLY);

    write(fd,argv[1],strlen(argv[1])+1);    printf("Sent to server: %s \n",argv[1]);

    close(fd);

}

服务器

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

    char *myfifo = "/tmp/talk";
    char buffer[2024];
    //char *log = "log.txt";
    int fd,n;

    mkfifo(myfifo, 0666);

    int log = open("log.txt",O_CREAT|O_APPEND|O_WRONLY, 0666);
    fd = open(myfifo,O_RDONLY);

    while(1) {
        if(n = read(fd,buffer,1024)>0) {
            write(log,buffer,n);
            write(1,buffer,n);
            //printf("Client connected sent: %s",buffer);
        }
    }   


}

【问题讨论】:

    标签: c named-pipes


    【解决方案1】:
    n = read(fd,buffer,1024)>0
    

    评价像

    n = (read(fd,buffer,1024)>0)
    

    所以1 存储在n 中(而不是读取的字节数)如果 read 返回一个正值。改为使用:

    (n = read(fd,buffer,1024))>0
    

    作为条件,它应该按预期工作。

    【讨论】:

    • 是的,有点简单的事情错过了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-12
    • 2021-12-20
    • 2012-10-18
    • 2012-02-11
    相关资源
    最近更新 更多