Как переместить указатель файла в определенное место с помощью fseek ()? - PullRequest
1 голос
/ 28 марта 2010

Мое намерение - прочитать все элементы 2-го столбца в buffer[] из следующего файла .txt:

9992891234 09,920 15,71 11,909
9992345971 07,892 12,234 09,234
9992348971 64,567 70,456 50,987
9992348231 89,234 85,890 58,982

Я знаю способ сделать это, используя fscanf():

    for (int i=0;i<4;i++)
    {
    fscanf(pFile, "%lld", &junk);
    fscanf(pFile, "%f", &buffer[i]);
    fscanf(pFile, "%f", &junk);
    fscanf(pFile, "%f", &junk);
    }

Однако, поскольку я занимаюсь параллельным программированием, которое требует от меня использования разных потоков Windows для чтения разных столбцов, поэтому мне нужно будет читать элементы во 2-м столбце напрямую, используя fseek().

Вопрос здесь в том, что я должен указать во втором аргументе в fseek() в приведенном ниже коде, чтобы переместить указатель моего файла для чтения 2-го элемента 2-й строки?

    fscanf(pFile, "%llf", &junk);//<------this is used to skip the 1st data

    for (int i=0;i<4;i++)
    {
            fscanf(pFile, "%f", &buffer[i]);
            fseek ( pFile , ??, SEEK_CUR );//<----how do I calculate this offset?
    }

Ответы [ 2 ]

4 голосов
/ 28 марта 2010

Файлы имеют только один указатель чтения. Вы будете вызывать смешное количество состояний гонки, если вы попытаетесь прочитать несколько потоков из одного и того же файла. Вместо этого пусть один поток отвечает за чтение файла, анализ строки и диспетчеризацию заданий.

1 голос
/ 28 марта 2010

Вы должны выполнять чтение всех файлов в одном потоке, а затем, если вам действительно необходимо выполнить «параллельное программирование» (домашнее задание?), Вы можете иметь отдельные потоки, получающие доступ к различным частям данных, которые вы прочитали в память через ваш поток чтения файла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...