免费注册 查看新帖 |

Chinaunix

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

[函数] 求助!readv()函数问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-07-16 12:07 |只看该作者 |倒序浏览
我自已建了一个文件内容是:
1111 pppp
2222 cccc
3333 dddd

我这个程序的目的是想把每一行前面的那4位数字读出来

我是这样写的:

char buf[4],buf1[4];
struct iovec iov[2];
iov[0].iov_base=buf;
iov[0].iov_len=4;
if((fd=open("/usr/tt.txt",O_RDONLY,0))==-1)
{
printf("open error\n";
exit(1);
}
if(readv(fd,&iov[0],1)!=4)
{
printf("readv buf error\n";
exit(0);
}
buf[4]=0;
printf("%s",buf);
if(lseek(fd,80,SEEK_SET)==-1)
{
printf("lseek error\n";
exit(1);
}
iov[1].iov_base=buf1;
iov[1].iov_len=4;
if(readv(fd,&iov[1],1)!=4)
{
printf("readv buf1 error\n";
exit(1);
}
printf("%s",buf1);
exit(0);
}
可是这个程序执行时就提示readv buf error
如果我如果将lseek(fd,1,SEEK_CUR);设为这种形式它能够读出elle;
如果我不判断readv(fd,&iov[1],1);
它就输出一个)。我建的文件里并没有)这个字符啊。
请问这是什么原因呢?

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
2 [报告]
发表于 2004-07-16 13:39 |只看该作者

求助!readv()函数问题

首先你的这种思路就是不对的,
干嘛用readv呀,用fgets读取一行,
然后copy前四个字符不就可以了。
》》char buf[4],buf1[4];
》》buf[4]=0;
你看看数组有没有越界?

  1. if(lseek(fd,80,SEEK_SET)==-1)
  2. {
  3. printf("lseek error\n");
  4. exit(1);
  5. }

复制代码

这句话是干什么?把指针定位到下一行?
行吗?

论坛徽章:
0
3 [报告]
发表于 2004-07-16 13:53 |只看该作者

求助!readv()函数问题

那要怎么才能把指针定位到下一行呢?

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
4 [报告]
发表于 2004-07-16 13:56 |只看该作者

求助!readv()函数问题

如果你的每行数目不定,我想是没有
很简洁的办法。
你用fgets不是很好嘛,指针会自动
移到下一行。
man fgets

真搞不懂你为什么要用readv,很好用吗?

论坛徽章:
0
5 [报告]
发表于 2004-07-16 14:05 |只看该作者

求助!readv()函数问题

我是用这个来读索引文件的。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
6 [报告]
发表于 2004-07-16 17:53 |只看该作者

求助!readv()函数问题

用 fgets。

论坛徽章:
0
7 [报告]
发表于 2009-07-22 02:01 |只看该作者
readv是用来读记录的
:wink:
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP