免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2242 | 回复: 5
打印 上一主题 下一主题

[C] 这段关于fseek函数的程序如何实现 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-01-12 22:22 |只看该作者 |倒序浏览
环境: centos ,gcc
dat文件内容:
12345abc
67890def

main.c 代码:


#include <stdio.h>

int main()
{
&nbsp;&nbsp;&nbsp;&nbsp;FILE *fi;
&nbsp;&nbsp;&nbsp;&nbsp;int i;
&nbsp;&nbsp;&nbsp;&nbsp;char buf[10]="";

&nbsp;&nbsp;&nbsp;&nbsp;fi=stdin;
&nbsp;&nbsp;&nbsp;&nbsp;//first time

&nbsp;&nbsp;&nbsp;&nbsp;fread(buf,1,5,fi);
&nbsp;&nbsp;&nbsp;&nbsp;i=fseek(fi,0,SEEK_SET);
&nbsp;&nbsp;&nbsp;&nbsp;//second time

&nbsp;&nbsp;&nbsp;&nbsp;fread(buf,1,5,fi);
&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;printf("%s\n",buf);

&nbsp;&nbsp;&nbsp;&nbsp;fclose(fi);
}




执行:
#g++ -g main.c
#dd if=dat | ./a.out

我想还是输出12345,怎么才能实现?

补充:
我就想知道用stdin读入一个二进制文件后再怎么把位置归零.

[ 本帖最后由 yukuteru 于 2010-1-12 22:37 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2010-01-12 22:42 |只看该作者
stdin不能这样seek的

论坛徽章:
0
3 [报告]
发表于 2010-01-12 22:46 |只看该作者
网上好像说SEEK_END不行 SEEK_SET可以.
都不行的话哪有别的办法么?

论坛徽章:
0
4 [报告]
发表于 2010-01-12 22:56 |只看该作者
没办法的  除非你读出来数据后再用ungetc放回去

论坛徽章:
0
5 [报告]
发表于 2010-01-12 22:59 |只看该作者
建议你使用文件做为中间数据 文件就可以fseek了

dd if=dat > tmp;  ./a.out tmp

论坛徽章:
0
6 [报告]
发表于 2010-01-12 23:05 |只看该作者
哦谢谢我明天试试
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP