Chinaunix

标题: 求助!readv()函数问题 [打印本页]

作者: jiajunpp    时间: 2004-07-16 12:07
标题: 求助!readv()函数问题
我自已建了一个文件内容是:
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);
它就输出一个)。我建的文件里并没有)这个字符啊。
请问这是什么原因呢?
作者: lenovo    时间: 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. }

复制代码

这句话是干什么?把指针定位到下一行?
行吗?
作者: jiajunpp    时间: 2004-07-16 13:53
标题: 求助!readv()函数问题
那要怎么才能把指针定位到下一行呢?
作者: lenovo    时间: 2004-07-16 13:56
标题: 求助!readv()函数问题
如果你的每行数目不定,我想是没有
很简洁的办法。
你用fgets不是很好嘛,指针会自动
移到下一行。
man fgets

真搞不懂你为什么要用readv,很好用吗?
作者: jiajunpp    时间: 2004-07-16 14:05
标题: 求助!readv()函数问题
我是用这个来读索引文件的。
作者: flw    时间: 2004-07-16 17:53
标题: 求助!readv()函数问题
用 fgets。
作者: magic1136    时间: 2009-07-22 02:01
readv是用来读记录的
:wink:




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2