尝试打开非常大的文件时,使用open命令出错
发布时间:2020-12-16 01:52:09 所属栏目:安全 来源:网络整理
导读:我正在学校上网,并且是第一次使用C / GDB.我们的任务是创建一个与客户端浏览器通信的Web服务器.我正在进行中,可以打开文件并将其发送给客户端.一切都很顺利,直到我打开一个非常大的文件,然后我就错了.我不是C / GDB的专业人员,所以我很抱歉,如果这导致我提出
我正在学校上网,并且是第一次使用C / GDB.我们的任务是创建一个与客户端浏览器通信的Web服务器.我正在进行中,可以打开文件并将其发送给客户端.一切都很顺利,直到我打开一个非常大的文件,然后我就错了.我不是C / GDB的专业人员,所以我很抱歉,如果这导致我提出愚蠢的问题而不能自己看到解决方案,但当我看到倾销的核心时,我看到我的seg故障来到这里:
if (-1 == (openfd = open(path,O_RDONLY))) 具体来说,我们的任务是打开文件并将其发送到客户端浏览器.我的算法是: >打开/错误捕获 我们的任务还包括确保在发送非常大的文件时服务器不会崩溃.但我的问题似乎是打开它们.我可以发送所有较小的文件.有问题的文件是29.5MB. 整个算法是: ssize_t send_file(int conn,char *path,int len,int blksize,char *mime) { int openfd; // File descriptor for file we open at path int temp; // Counter for the size of the file that we send char buffer[len]; // Buffer to read the file we are opening that is len big // Open the file if (-1 == (openfd = open(path,O_RDONLY))) { send_head(conn,"",400,strlen(ERROR_400)); (void) send(conn,ERROR_400,strlen(ERROR_400),0); logwrite(stdout,CANT_OPEN); return -1; } // Read from file if (-1 == read(openfd,buffer,len)) { send_head(conn,CANT_OPEN); return -1; } (void) close(openfd); // Send the buffer now logwrite(stdout,SUC_REQ); send_head(conn,mime,200,len); send(conn,&buffer[0],len,0); return len; } 我不知道如果这只是一个事实,我是Unix / C新手.对不起,如果是的话. =(但你非常感谢你的帮助. 解决方法
可能尝试使用malloc分配内存,而不是使用可变长度数组.
char *buffer = malloc (len); ... free (buffer); 我刚刚对我的系统进行了一些简单的测试,当我使用大尺寸的可变长度数组(就像你遇到麻烦的那样)时,我也得到了一个SEGFAULT. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |