我有这段代码:
while (1) {
char buffer[4096];
memset(buffer,0,4096);
int bytes_read = recv(client_fd, buffer, sizeof(buffer),0);
if (bytes_read == 0)
break;
if (bytes_read < 0) {
std::cout<< "Error "<<endl;
}
void *p = buffer;
int dest;
dest=open("/root/hello.txt",O_WRONLY);
while (bytes_read > 0) {
int bytes_written = send(dest, buffer, bytes_read,0);
if (bytes_written <= 0) {
std::cout<< "Error2 "<<endl;
}
bytes_read -= bytes_written;
p += bytes_written;
}
}
我正确收到了该文件。
程序进入循环,其中cout为“Error2”,因此send返回-1。
问题是将文件写入新的文件描述符,在本例中是名为dest
的变量。
我该如何解决这个问题?
答案 0 :(得分:2)
根据the manual-page for send(2)
,它只能写入套接字,而不能写入常规文件;如果您选中errno
(使用例如perror
),您会看到它已设置为ENOTSOCK
。您应该始终看到正在设置错误,否则调试只是在黑暗中拍摄。
此外,由于这是C ++,我真的认为你应该使用C ++风格的I / O(std::ofstream
等)来写入常规文件。
答案 1 :(得分:0)
检查
的返回值dest=open("/root/hello.txt",O_WRONLY);
它应该是一个正整数;其他一切都表示错误。我的猜测是,无论出于何种原因,都无法打开文件。