QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 2602|回复: 56

求源码,急!谢谢

[复制链接]
发表于 2003-5-26 15:17:06 | 显示全部楼层 |阅读模式
用函数调用,向一张软盘顺序写入一文件的源码。
第一个扇区写文件名和大小,剩下的就写入文件。
谢谢各位!小弟写了半天就是不对
还有那个向软盘固定扇区写信息的函数是什么?
发表于 2003-5-26 16:23:11 | 显示全部楼层
就是open/read/write/close/lseek这系列函数就可以萨
回复

使用道具 举报

 楼主| 发表于 2003-5-26 17:14:40 | 显示全部楼层
:neutral: 不行呀,
用write函数,文件写入软盘时还是按ext2的格式存,前几个扇区中还是要添固定的信息。我要用的是一个向软盘扇区硬写的函数,象windows格式化向软盘写信息的biosdisk一样的函数

总之一句话,我要将文件以我自定义的格式存入软盘,只有我写的命令才读得出。

请问版主有没有什么提议?谢谢,请帮帮我
回复

使用道具 举报

 楼主| 发表于 2003-5-26 17:14:56 | 显示全部楼层
:neutral: 不行呀,
用write函数,文件写入软盘时还是按ext2的格式存,前几个扇区中还是要添固定的信息。我要用的是一个向软盘扇区硬写的函数,象windows格式化向软盘写信息的biosdisk一样的函数

总之一句话,我要将文件以我自定义的格式存入软盘,只有我写的命令才读得出。

请问版主有没有什么提议?谢谢,请帮帮我
回复

使用道具 举报

发表于 2003-5-26 17:53:55 | 显示全部楼层
open软盘设备,write扇区,不行吗?
看看dd怎么做的。
不会吧?我在FreeBSD下也这样做,写硬盘扇区一点问题都没。
回复

使用道具 举报

 楼主| 发表于 2003-5-26 19:56:38 | 显示全部楼层
明白,不过可以给我一个小小的例子吗?

万分感谢!!
回复

使用道具 举报

 楼主| 发表于 2003-5-26 19:58:44 | 显示全部楼层
是对特定的几个扇区写数据,(注意是特定哟)
回复

使用道具 举报

 楼主| 发表于 2003-5-26 19:59:01 | 显示全部楼层
是对特定的几个扇区写数据,(注意是特定哟)
回复

使用道具 举报

发表于 2003-5-26 20:09:30 | 显示全部楼层
你等会儿,我没有在linux下编过,我试试先
回复

使用道具 举报

 楼主| 发表于 2003-5-26 20:13:45 | 显示全部楼层
太好了,谢谢版主
回复

使用道具 举报

发表于 2003-5-26 20:28:06 | 显示全部楼层
我们的目的是写第四个扇区。
[code:1]
       test.c
      1 #include <stdio.h>
      2 #include <sys/types.h>
      3 #include <sys/stat.h>
      4 #include <fcntl.h>
      5 #include <sys/errno.h>
      6
      7 #define DEVICE_NAME "/dev/sda"
      8 #define MY_OFFSET   (3 * 512)
      9
     10 struct mysector {
     11   char pad[512];
     12 };
     13
     14 int
     15 main(int argc, char *argv[])
     16 {
     17     int i, fd;
     18     struct mysector mytest;
     19
     20     for( i = 0; i < 512; i++)
     21        mytest.pad[i] = (char)(i / 4);
     22     fd = open(DEVICE_NAME, O_RDWR);
     23     if( !fd ) {
     24        printf("errno is %d\n", errno);
     25        return errno;
     26     }
     27     lseek(fd,MY_OFFSET,SEEK_SET);
     28     write(fd, &mytest, 512);
     29     close(fd);
     30     return 0;
     31 }
[/code:1]
我的硬盘是scsi的。
#gcc -o test test.c
#./test
# dd if=/dev/sda of=file skip=3 count=1
# hexdump file
     
0000000 0000 0000 0101 0101 0202 0202 0303 0303
0000010 0404 0404 0505 0505 0606 0606 0707 0707
0000020 0808 0808 0909 0909 0a0a 0a0a 0b0b 0b0b
0000030 0c0c 0c0c 0d0d 0d0d 0e0e 0e0e 0f0f 0f0f
0000040 1010 1010 1111 1111 1212 1212 1313 1313
0000050 1414 1414 1515 1515 1616 1616 1717 1717
0000060 1818 1818 1919 1919 1a1a 1a1a 1b1b 1b1b
0000070 1c1c 1c1c 1d1d 1d1d 1e1e 1e1e 1f1f 1f1f
0000080 2020 2020 2121 2121 2222 2222 2323 2323
0000090 2424 2424 2525 2525 2626 2626 2727 2727
00000a0 2828 2828 2929 2929 2a2a 2a2a 2b2b 2b2b
00000b0 2c2c 2c2c 2d2d 2d2d 2e2e 2e2e 2f2f 2f2f
00000c0 3030 3030 3131 3131 3232 3232 3333 3333
00000d0 3434 3434 3535 3535 3636 3636 3737 3737
00000e0 3838 3838 3939 3939 3a3a 3a3a 3b3b 3b3b
00000f0 3c3c 3c3c 3d3d 3d3d 3e3e 3e3e 3f3f 3f3f
0000100 4040 4040 4141 4141 4242 4242 4343 4343
0000110 4444 4444 4545 4545 4646 4646 4747 4747
0000120 4848 4848 4949 4949 4a4a 4a4a 4b4b 4b4b
0000130 4c4c 4c4c 4d4d 4d4d 4e4e 4e4e 4f4f 4f4f
0000140 5050 5050 5151 5151 5252 5252 5353 5353
0000150 5454 5454 5555 5555 5656 5656 5757 5757
0000160 5858 5858 5959 5959 5a5a 5a5a 5b5b 5b5b
0000170 5c5c 5c5c 5d5d 5d5d 5e5e 5e5e 5f5f 5f5f
0000180 6060 6060 6161 6161 6262 6262 6363 6363
0000190 6464 6464 6565 6565 6666 6666 6767 6767
00001a0 6868 6868 6969 6969 6a6a 6a6a 6b6b 6b6b
00001b0 6c6c 6c6c 6d6d 6d6d 6e6e 6e6e 6f6f 6f6f
00001c0 7070 7070 7171 7171 7272 7272 7373 7373
00001d0 7474 7474 7575 7575 7676 7676 7777 7777
00001e0 7878 7878 7979 7979 7a7a 7a7a 7b7b 7b7b
00001f0 7c7c 7c7c 7d7d 7d7d 7e7e 7e7e 7f7f 7f7f
0000200

和我们预想的一样。
回复

使用道具 举报

 楼主| 发表于 2003-5-26 20:54:35 | 显示全部楼层
实在太感谢您了,谢谢!!

再麻烦您一下,ext2文件系统下的任意文件都能这样写入特定的软盘扇区吗?怎样做?

也就是说,我要将一个文件写入软盘,但并不是象ext2格式那样几个扇区还要写入特定的内容(如0位要写引导块)

我问的有点乱,不好意思
回复

使用道具 举报

发表于 2003-5-26 21:02:32 | 显示全部楼层
一般我们可以利用一个硬盘的前面63个扇区,第一个扇区除外,这是MBR。别的系统都没用。在后面系统使用了的情况下,一般不这样用,因为,没有inode与之对应。假设,我写了一个block的数据,以后ext2分配block写入新的文件时,发现这个block的位图是没有用,可能会选择这个block存放新的文件,这不就冲掉你的数据吗?
回复

使用道具 举报

 楼主| 发表于 2003-5-26 21:15:33 | 显示全部楼层
我是说把文件写入软盘,不是硬盘
象格式化ext2的软盘,软盘的ext2块分配如下:
                                  0:引导块
                                  1:超级块
                                  2:包含一个单独的块组描述符的块
                                  3:数据块位图
                                  4:索引节点位图
                               5~49:索引节点表
                                 50:根目录
                                 51:lost+found目录
                             52~62给lost+found目录预分配保留的块
                            63~1439:空闲块
format软盘就是向软盘的这几个固定扇区写入相应的内容便可
我想问的是我们怎么将ext2文件系统中的一个文件象这样地写入软盘?只要第一个扇区添文件名和文件大小,其他扇区都添数据就行了。请帮忙,谢谢
回复

使用道具 举报

 楼主| 发表于 2003-5-26 21:21:04 | 显示全部楼层
我这样做的目的是为了给软盘里的文件加密
在ext2文件系统下,象这样写入软盘的文件是读不出来的,要用命令读的
回复

使用道具 举报

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

本版积分规则

GMT+8, 2024-11-15 20:08 , Processed in 0.052154 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

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