写入失败,错误0

时间:2010-06-16 22:43:05

标签: c networking linux-kernel

我有一个客户端服务器情况,我使用

接收数据
read(socket, char_buf, BUF_SIZE)

然后尝试使用

将其写入日志文件
write(filefd, char_buf, strlen(char_buf))

奇怪的是,这失败了(写入返回-1),但是errno设置为0,我可以打印消息,并且日志文件描述符有效(我在此命令之前和之后写入它)。

发生了什么事?

(使用Linux内核2.4(作业))

3 个答案:

答案 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之间的任何位置。