无法使用seekdir()设置流位置

时间:2013-05-01 20:46:04

标签: c++ linux gcc

据我所知,seekdir必须设置当前流的位置。但是如果我设置它 - 它会在下一个d_name之后为任何位置参数返回相同的readdir。我只想读取手动输入位置的目录名称,并且不想在其中使用带有readdir的循环

#include <iostream>
#include <sys/types.h>
#include <dirent.h>
#include <string.h>
using namespace std;

int main(int argc, char* argv[])
{
    if(argc > 1)
    {
        DIR* directory = opendir(argv[1]);
        if (directory == NULL)
        {
            cout << "Enter valid directory name" << endl;
            return -1;
        }

        long position = 0;
        cout << "Enter position of directory stream: ";
        cin >> position;

        seekdir(directory, position);

        dirent *dir = readdir(directory);

        cout << dir->d_name <<":"<< strlen(dir->d_name) << endl;
        closedir(directory);

        return 0;
    }
    else
    {
        return -1;
    }
}

1 个答案:

答案 0 :(得分:2)

来自POSIX标准

  

seekdir()函数应设置下一个readdir()的位置   对dirp指定的目录流的操作到该位置   由loc指定。 loc的值应该从一个返回   之前调用telldir()。新的立场恢复到一个位置   执行telldir()时与目录流关联。

     

如果未通过之前的调用获得loc的值   telldir(),或者如果在调用之间发生了对rewinddir()的调用   telldir()和调用seekdir(),后续调用的结果   readdir()未指定。

换句话说,您不能将seekdir用于让用户输入的位置。仅使用telldir返回的值。所以你只需要编写那个循环。