读取 jpg 文件的简单代码 read retured 0 errno 0
simple code to read jpg files read retured 0 errno 0
我有读取 .jpg 文件的简单代码
但是我的 read returns 0 和 errno 是 0。我只是更喜欢将 read 与 read 系统调用一起使用。
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <errno.h>
int main()
{
int fd=open("./a.jpg",O_RDONLY);
int i=0;
printf("%d %d %d\n",fd,errno,O_RDONLY);
char buffer[1500];
while(i<1500)
{
int valread=read(fd,&buffer[i],100);
//printf("[valread = %d]\n",valread);
i=i+valread;
}
i=0;
while(i<1500)
{
printf("%x ",buffer[i]);
i++;
}
return 0;
}
任何人都可以指出上面的代码有什么问题。
循环
while (i < 1500) {
printf("%x ", buffer[i]);
i++;
}
不理想,如果缓冲区正确填充了 1500
字节,它将正常工作,否则行为未定义。
我建议一次性阅读整个文件,这样更简单并且避免了OP评论中指出的问题。然后,您可以使用 read
的 return 值作为打印循环的限制,而不是硬编码的 1500
值, 即 :
int valread = read(fd, buffer, sizeof buffer);
while (i < valread) {
printf("%x ", buffer[i]);
i++;
}
你没告诉我们fd
的值是多少,如果是正整数就表示文件打开成功,否则open
调用失败。它也可以 return 0
,但这是为 stdin
保留的,所以它不应该,除非你在别处关闭 stdin
。您可以使用 perror
进一步诊断可能的问题。
如果 open
调用确实 return 是一个有效的文件描述符,那么一切都很好,如果输出不是您所期望的,那应该意味着该文件不包含预期的数据。
带有建议更改的示例代码:
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main() {
int fd = open("./a.jpg", O_RDONLY);
if (fd < 0) {
perror("Error");
return EXIT_FAILURE;
}
int i = 0;
char buffer[1500];
int valread = read(fd, buffer, sizeof buffer);
while (i < valread) {
printf("%x ", buffer[i]);
i++;
}
}
我有读取 .jpg 文件的简单代码
但是我的 read returns 0 和 errno 是 0。我只是更喜欢将 read 与 read 系统调用一起使用。
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <errno.h>
int main()
{
int fd=open("./a.jpg",O_RDONLY);
int i=0;
printf("%d %d %d\n",fd,errno,O_RDONLY);
char buffer[1500];
while(i<1500)
{
int valread=read(fd,&buffer[i],100);
//printf("[valread = %d]\n",valread);
i=i+valread;
}
i=0;
while(i<1500)
{
printf("%x ",buffer[i]);
i++;
}
return 0;
}
任何人都可以指出上面的代码有什么问题。
循环
while (i < 1500) {
printf("%x ", buffer[i]);
i++;
}
不理想,如果缓冲区正确填充了 1500
字节,它将正常工作,否则行为未定义。
我建议一次性阅读整个文件,这样更简单并且避免了OP评论中指出的问题。然后,您可以使用 read
的 return 值作为打印循环的限制,而不是硬编码的 1500
值, 即 :
int valread = read(fd, buffer, sizeof buffer);
while (i < valread) {
printf("%x ", buffer[i]);
i++;
}
你没告诉我们fd
的值是多少,如果是正整数就表示文件打开成功,否则open
调用失败。它也可以 return 0
,但这是为 stdin
保留的,所以它不应该,除非你在别处关闭 stdin
。您可以使用 perror
进一步诊断可能的问题。
如果 open
调用确实 return 是一个有效的文件描述符,那么一切都很好,如果输出不是您所期望的,那应该意味着该文件不包含预期的数据。
带有建议更改的示例代码:
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main() {
int fd = open("./a.jpg", O_RDONLY);
if (fd < 0) {
perror("Error");
return EXIT_FAILURE;
}
int i = 0;
char buffer[1500];
int valread = read(fd, buffer, sizeof buffer);
while (i < valread) {
printf("%x ", buffer[i]);
i++;
}
}