QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 645|回复: 4

一段程序,麻烦大家看一下,谢谢!

[复制链接]
发表于 2003-6-1 08:27:44 | 显示全部楼层 |阅读模式
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <sys/errno.h>
#include <unistd.h>

#define BUFFER_SIZE 108
#define DEVICE_NAME "/dev/fd0"
#define MY_OFFSET (250*512)

int main (int argc, char **argv)
{
  int from_fd,to_fd;
  int bytes_read,bytes_write;
  char buffer[BUFFER_SIZE];
  char *ptr;
  if(argc!=2)
  {
  printf("%s need input filename\n\a",argv[0]);
  exit(1);
  }

  from_fd=open(DEVICE_NAME,O_RDWR);
  if(!to_fd)
  {
  printf("errno is %d\n",errno);
  exit(1);
  }
  
  if((to_fd=open(argv[1],O_WRONLY|O_CREAT,S_IRUSR|S_IWUSR))==-1)
  {
  fprintf(stderr,"Open %s Error:%s\n",argv[2],strerror(errno));
  exit(1);
  }
  
    lseek(to_fd,MY_OFFSET,SEEK_SET);

    bytes_read=read(from_fd,buffer,BUFFER_SIZE);
    ptr=buffer;
    bytes_write=write(to_fd,ptr,bytes_read);


  
  close(from_fd);
  close(to_fd);
  exit(0);
}

运行后竟将软盘250扇区之后的所有内容都读出来了,可我只想读出108个字节,请问该怎么办?谢谢
发表于 2003-6-1 09:06:23 | 显示全部楼层
怎么会 你的BUFFER大小只有108啊?
回复

使用道具 举报

 楼主| 发表于 2003-6-1 09:12:36 | 显示全部楼层
缓存不是可以随意设的吗?这不是问题的实质
回复

使用道具 举报

发表于 2003-6-1 10:28:31 | 显示全部楼层
我意思是 你的buffer大小是108 如果你读入这个缓存200字节的话 怎么还能没有一个溢出的错误?通常这种错误会导致你的程序失败除非你故意设定一个溢出地址来完成一个hack 实际上read操作内部是判断这个值的 也就是你在read内部不可能取得大于buffersize的内容 那么你怎么还能读到后面扇区的东西呢?
ps: 什么叫做缓存可以随便设?
回复

使用道具 举报

 楼主| 发表于 2003-6-1 12:29:29 | 显示全部楼层
明白了,谢谢

还有我找到错误了
lseek(to_fd,MY_OFFSET,SEEK_SET);
中的to_fd改成from_fd就行了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-15 18:52 , Processed in 0.035670 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表