命名管道客户端和服务器,消息在服务器上被截断?
Named Pipe client and server, message truncated on server?
我有一个服务器总是 运行,它创建一个日志文件,通过命名管道接收一个参数并将其存储在 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);
}
}
}
n = read(fd,buffer,1024)>0
评价喜欢
n = (read(fd,buffer,1024)>0)
所以1
存储在n
中(而不是读取的字节数)如果读取returns一个正值。改用:
(n = read(fd,buffer,1024))>0
作为条件,那么它应该按预期工作。
我有一个服务器总是 运行,它创建一个日志文件,通过命名管道接收一个参数并将其存储在 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);
}
}
}
n = read(fd,buffer,1024)>0
评价喜欢
n = (read(fd,buffer,1024)>0)
所以1
存储在n
中(而不是读取的字节数)如果读取returns一个正值。改用:
(n = read(fd,buffer,1024))>0
作为条件,那么它应该按预期工作。