fopen返回NULL

luowuf 2011-11-30 09:33:51
以下是代码
求解为什么会fopen返回NULL;
#include <stdio.h>
#include <stdlib.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <sys/types.h>

#define TURE 1

#define LOCAL_SERVER_PORT 5866
#define MAX_MSG 1024

int main(void)
{
int n, fd;
socklen_t cli_addr_len;
char buf[MAX_MSG] = {0};
unsigned long int npak=0;
struct sockaddr_in servaddr, cliaddr;
FILE *fp;
int KZ=0;
int sendbufsize,recvbufsize;
int size=4;

printf("n%20 printf or 1 printf or no printf(2/1/0)?");//多少个包打印一次
scanf("%d", &KZ);
printf("stat:\n");
if((fp=fopen("udp.dat", "wb")) == NULL)
{
printf("error - open file.");
return 0;
}
if((fd = socket(AF_INET, SOCK_DGRAM, 0)) == -1)
{
printf("socket error!\n");
exit(0);
}

servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
servaddr.sin_port = htons(LOCAL_SERVER_PORT);
bind(fd, (struct sockaddr *)&servaddr, sizeof(servaddr));

//设置系统缓冲区大小
size = sizeof(int);
recvbufsize = 0;
if(getsockopt(fd, SOL_SOCKET, SO_RCVBUF, (void *)&recvbufsize, &size) == 0)
printf("recvbufsize = %d\n", recvbufsize);
recvbufsize = 128*1024;
if(setsockopt(fd, SOL_SOCKET, SO_RCVBUF, (void *)&recvbufsize, sizeof(int)) == 0 )
printf("recvbufsize = %d\n", recvbufsize);
if(getsockopt(fd, SOL_SOCKET, SO_RCVBUF, (void *)&recvbufsize, &size) == 0)
printf("recvbufsize = %d\n", recvbufsize);


while(TURE)
{
cli_addr_len = sizeof(cliaddr);
n =recvfrom(fd, buf,MAX_MSG, 0, (struct sockaddr *)&cliaddr, &cli_addr_len);//接收数据
npak++;
if((KZ==2) && !(npak%20))
printf("%d\n", npak);
else if(KZ == 1)
printf("%d\n", npak);
fwrite(buf, MAX_MSG, 1, fp);//写硬盘,每一个包一写
}
fclose(fp);
return 0;
}
...全文
182 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
justkk 2011-11-30
  • 打赏
  • 举报
回复
没看出什么问题,试试

if((fp=fopen("/tmp/udp.dat", "w")) == NULL)
luowuf 2011-11-30
  • 打赏
  • 举报
回复

怎么会这样啊,我用
if((fp=fopen("udp.dat", "wb")) == NULL)
{
printf("error - open file.");
return 0;
}
打印的是error - open file.
换成if((fp=fopen("udp.dat", "wb")) == NULL)
{
perror("fopen");
exit(0)
}
就是fopen:Sucess
我是菜鸟,麻烦大神们解释详细一些,谢谢!
justkk 2011-11-30
  • 打赏
  • 举报
回复
printf("error - open file.");
把上面这行换一下

perror("fopen");
然后再编译运行,看看有什么错误信息
Wenxy1 2011-11-30
  • 打赏
  • 举报
回复
用perror()输出错误信息,errno是错误码。
JoeBlackzqq 2011-11-30
  • 打赏
  • 举报
回复
编译运行你的源程序,没有修改任何东西,运行结果:
[zcm@t #80]$./a
n%20 printf or 1 printf or no printf(2/1/0)?1
stat:
recvbufsize = 262144
recvbufsize = 131072
recvbufsize = 262144
^C
[zcm@t #81]$

可见,并没有出现你说的问题。看看当前目录有没有udp.dat文件生成,或者换个文件名试下。

23,125

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧