我有一个客户端服务器情况,我使用
接收数据read(socket, char_buf, BUF_SIZE)
然后尝试使用
将其写入日志文件write(filefd, char_buf, strlen(char_buf))
奇怪的是,这失败了(写入返回-1),但是errno设置为0,我可以打印消息,并且日志文件描述符有效(我在此命令之前和之后写入它)。
发生了什么事?
(使用Linux内核2.4(作业))
答案 0 :(得分:2)
int reads = read(socket, char_buf, BUF_SIZE);
if ( reads != BUF_SIZE )
{
/* something might have gone wrong */
fprintf( stderr, "%s\n", strerror( errno ));
}
int writes= = write( filedes, buffer, buffer_size );
if ( writes != buffer_size )
{
/* something might have gone wrong */
fprintf( stderr, "%s\n", strerror( errno ));
}
我会在读或写或此类电话之后做这样的事情。
答案 1 :(得分:0)
您是否检查过您的阅读状态()?它可能有一个错误,导致char_buf的长度为零。
答案 2 :(得分:0)
使用调试器逐步执行代码,并确保每个语句完全按照您的认为应该执行的操作。我打赌你会发现一个早期的错误。
此外,read()
的返回值很重要。它告诉你实际读取了多少字节。要成功阅读,它可以是1到BUF_SIZE
之间的任何位置。