作者mcauther (乘着风去旅行)
看板LinuxDev
标题Re: [问题]请问开档问题 关於dev
时间Mon May 5 20:06:53 2008
※ 引述《RiverJackson (JACK)》之铭言:
: 请问一下
: #include <stdio.h>
: #include <string.h>
: int main(int argc, char *argv[])
: {
: char buf[100];
: FILE *fp=fopen("qq.txt", "a");
: fseek(fp, 50, SEEK_SET);
: 这里的seek_set是指 档案开头呢 还是档案最後 因为用'a' mode open file
: memset(buf, '1', 100);
: fwrite(buf, 1, 5, fp);
: fclose(fp);
: return 0;
: }
: 这里如果qq.txt已经存在的话 fseek里面的50好像不管设多少
: fp都是指到qq.txt内容的最後面 假如qq.txt 内容是 ttttt好了
: 程式码执行後就会变 ttttt11111 所以那个50的指定是没用的???
: 目的是想说 假设qq.txt改为mtdblock/1 如果执行此程式 是不是就会
: 直接把1写到mtdblock/2 而且是从mtdblock/2的开头开始写 部会从第50开始写?
: 还是我观念有错误
: 这样讲好了 我的目的就是 :
: 假设mtdblock/1 范围是从1到1000好了, 我想在此范围里面的500到600
: 全部设为0xff的话 该怎麽做呢?? 然後又不会影响其他范围内容??
: Thanks~ ^^
因为最近刚好有看到相关的 code
所以说说看比较好的作法
我还不大了解 mtd 是什麽
不过可以参考看看这种作法 , 因为看你的文章好像只需用到 binary 操作
你可以试着将档案开成 binary mode
然後用 read 读入一个 char array
再直接对 array 操作(memset)
然後再开启 mtd , (用 wb 模式 , 开启後会将原来档案设为零)
或试用可以复写的 mode 用 write 写回就可以了
参考看看
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 122.116.238.93
1F:推 RiverJackson:thanks but 如果是要对档案中的某一段作修改?? 05/05 22:04
2F:推 Neo1978:用 fopen, mode "r+" 05/08 12:36
3F:推 RiverJackson:thanks ^^ 05/08 23:00