我无法通过sock_stream连接一次发送一个字符串,一个字符。原因是我试图一次发送多个字符串,这些字符串接近70000个字符。我试图使用的写函数似乎需要一个字符串。
int read_line(int fd,char message[])
{
size_t message_len=0;
while (message_len<BUF_SIZE)
{
char c;
int ret = read(fd, &c, 1);
if (ret < 0)
{
message[message_len] = 0;
return len; // EOF reached
}
if (c == '^')
{
read(fd,&c,1);
message[message_len] = 0;
return message_len; // EOF reached
}
data[len++] = c;
}
}
另外,我怎么读这个?这就是我尝试它的方式。
{{1}}
我该如何实现?谢谢。
答案 0 :(得分:1)
写api的签名是: int write(int fd,const void * buf,size_t nbyte);
那么你可以做些什么:
TCP_NODELAY
类似地,你应该尝试进行批量读取,因为除非你有一个非常正确的理由,否则一次读取一个字符太慢。每次你写或读,它的系统调用都是昂贵的。
因此,对于阅读,您可以尝试类似
的内容int read_bytes = read(fd,buf,BUF_SIZE);
和read_bytes将具有您已读取的确切值。
然后执行parse_buf(buf),在其中您可以找到您要查找的标记,然后保存其余部分以备将来获取更多数据,否则如果您获得的数据更少,则再次调用read。
答案 1 :(得分:0)
您需要更改行
FAILED: SemanticException Recursive cte cteCalculation detected (cycle: ctecalculation -> cteCalculation).
到
write(sockfd,plaintext[i],1);
此外,您可以使用
write(sockfd,&plaintext[i],1);
启用setsockopt(sockfd, IPPROTO_TCP, TCP_NODELAY, (char *) &flag, sizeof(int));
选项。