LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1458|回复: 18

如何定位、读写某个特定的扇区?

[复制链接]
发表于 2005-5-12 20:08:26 | 显示全部楼层 |阅读模式
要求定位到特定的扇区,然后读写它

使用open read write

thx
发表于 2005-5-12 21:46:15 | 显示全部楼层
直接打开/dev/hda    ?
没做过
回复 支持 反对

使用道具 举报

发表于 2005-5-12 21:48:49 | 显示全部楼层
看看dd,fdisk之类的代码应该有帮助
回复 支持 反对

使用道具 举报

发表于 2005-5-12 21:57:59 | 显示全部楼层
Post by waddling
直接打开/dev/hda    ?
没做过


对,可以这么做,我试过。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-5-12 22:06:12 | 显示全部楼层
如何定位到特定的扇区?
回复 支持 反对

使用道具 举报

发表于 2005-5-12 22:30:00 | 显示全部楼层
Post by macarthor
如何定位到特定的扇区?


用lseek就可以。不过定位到多少就不知道了。可能是:(磁道号*每个磁道的扇区数+扇区号)*每扇区字节数+扇区内偏移。不过不确定。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-5-12 23:41:16 | 显示全部楼层
Post by Tetris
对,可以这么做,我试过。


  1. #include <stdio.h>
  2. #include <sys/types.h>
  3. #include <sys/stat.h>
  4. #include <unistd.h>
  5. #include <fcntl.h>

  6. int main()
  7. {
  8.     int fd;
  9.     char *buffer;

  10.     if(-1 == (fd = open("/dev/hda1", O_RDONLY)))
  11.     {
  12.         printf("/dev/hda open error!\n\n");
  13.         exit(0);
  14.     }

  15.     if(-1 == read(fd, buffer, 64))
  16.     {
  17.         printf("/dev/hda1 read error!\n\n");
  18.         exit(0);
  19.     }

  20.     printf("%s\n\n", buffer);

  21.     close(fd);

  22.     return 0;
  23. }

复制代码


执行


  1. gcc main.c -o disk
  2. ./disk
复制代码


输出


  1. /dev/hda1 open error!
复制代码
回复 支持 反对

使用道具 举报

发表于 2005-5-12 23:51:05 | 显示全部楼层
试试改成/dev/hda
回复 支持 反对

使用道具 举报

发表于 2005-5-12 23:53:11 | 显示全部楼层
brw-rw----    1 root     disk       3,   1 Sep 15  2003 hda1
普通用户不可以的。
错误信息应该打到stderr,例如:
perror("open error") or
fprintf(stderr, "open error: %s\n", strerror(errno));
这样就知道是出什么错啦。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-5-12 23:53:34 | 显示全部楼层
还是不行的

本意是想读取/dev/hda的MBR,即开始的64字节
回复 支持 反对

使用道具 举报

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

本版积分规则

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