我正在编写一个允许使用HTTP协议发送文件的简单服务器。我有一个函数,将文件中的所有内容放入缓冲区。 在阅读之前,一切顺利。正确打印文件大小。但是在阅读程序上等待。
char *get_file(char *dir) {
fprintf(stderr, "GET FILE\n");
char *buff;
int fd;
if (fd = open(dir, O_RDONLY) == -1) {
fprintf(stderr, "No such file: %s\n", dir);
exit(6);
}
size_t size = fsize(dir);
fprintf(stderr, "OPENED FILE, SIZE: %ld\n", size);
buff = malloc(size);
read(fd, buff, size);
fprintf(stderr, "to be downloaded: %s\n", buff);
char *response = make_file_response(buff);
return response;
}
答案 0 :(得分:3)
您对此声明有疑问
==
首先评估运算符优先级fd
,因此,if ((fd = open(dir, O_RDONLY)) == -1)
/* ^~~~~~~~~~~~~~~~~~~~~~~~~^ */
被赋予比较值而不是打开的文件描述符。
启用编译器警告时会建议使用括号,并且修正后的表达式为
open()
首先将fd
的返回值分配给fd
,然后执行比较。
如果您打印0
的值,如果open()
成功,则会看到-1
。否则返回的值不是1
和TotalFeedbackCount:gt:0
TotalPositiveFeedbackCount:gt:0
TotalNegotiveFeedbackCount:gt:0
。