Рекурсивное использование регистрации Clearcase

Строки с нулевым символом в конце - это конструкция C, используемая для определения конца последовательности символов, предназначенной для использования в качестве строки. Функции манипуляции со строками, такие как strcmp, strcpy, strchr и другие, используют эту конструкцию для выполнения своих обязанностей.

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

Вот пример того, как это работает:

#include <stdio.h>
#include <stdlib.h>

int main()
{
    FILE *fp = fopen("out1","w");
    if (fp == NULL) {
        perror("fopen failed");
        exit(1);
    }

    int a1[] = { 0x12345678, 0x33220011, 0x0, 0x445566 };
    char a2[] =  { 0x22, 0x33, 0x0, 0x66 };
    char a3[] = "Hello\x0World";

    // this writes the whole array
    fwrite(a1, sizeof(a1[0]), 4, fp);
    // so does this
    fwrite(a2, sizeof(a2[0]), 4, fp);
    // this does not write the whole array -- only "Hello" is written
    fprintf(fp, "%s\n", a3);
    // but this does
    fwrite(a3, sizeof(a3[0]), 12, fp);
    fclose(fp);
    return 0;
}

Содержимое out1:

[dbush@db-centos tmp]$ xxd out1
0000000: 7856 3412 1100 2233 0000 0000 6655 4400  xV4..."3....fUD.
0000010: 2233 0066 4865 6c6c 6f0a 4865 6c6c 6f00  "3.fHello.Hello.
0000020: 576f 726c 6400                           World.

Для первого массива, потому что мы используем функцию fwrite и сообщаем ей запишите 4 элемента размером int, все значения в массиве появятся в файле. Из вывода видно, что все значения записаны, значения 32-разрядные, а каждое значение записано в порядке байтов с прямым порядком байтов. Мы также видим, что каждый второй и четвертый элементы массива содержат один нулевой байт, а третье значение 0 имеет 4 нулевых байта, и все они появляются в файле.

Мы также используем fwrite для второго массива, который содержит элементы типа char, и мы снова видим, что все элементы массива появляются в файле. В частности, третье значение в массиве - 0, которое состоит из одного нулевого байта, который также появляется в файле.

Третий массив сначала записывается с помощью функции fprintf с использованием спецификатора формата %s, который ожидает строку. Он записывает первые 5 байтов этого массива в файл перед тем, как встретить нулевой байт, после чего прекращает чтение массива. Затем он печатает символ новой строки (0x0a) в соответствии с форматом.

Третий массив снова записывается в файл, на этот раз с помощью fwrite. Строковая константа "Hello\x0World" содержит 12 байтов: 5 для «Hello», один для явного нулевого байта, 5 для «World» и один для нулевого байта, который неявно завершает строковую константу. Поскольку fwrite дан полный размер массива (12), он записывает все эти байты. Действительно, глядя на содержимое файла, мы видим каждый из этих байтов.

В качестве примечания, в каждом из вызовов fwrite я жестко закодировал размер массива для третьего параметра вместо того, чтобы использовать более динамическое выражение, такое как sizeof(a1)/sizeof(a1[0]), чтобы более точно определить, сколько байты пишутся в каждом случае.

7
задан ThomasMcLeod 17 January 2014 в 20:23
поделиться

3 ответа

Я бы порекомендовал этот вопрос : Это проблематично, поскольку часто не все меняется, и ClearCase вызывает сообщение об ошибке при попытке проверить идентичный файл. Это означает, что вам понадобятся 2 команды:

ct lsco -r -cvi -fmt "ci -nc \"%n\"\n" | ct
ct lsco -r -cvi -fmt "unco -rm %n\n" | ct

(где 'ct является' cleartool ': введите' doskey ct = cleartool $ * 'в Windows, чтобы установить этот псевдоним)


Но если под «checkin» вы имеете в виду:

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

Я бы рекомендовал создать динамическое представление и очистить fsimport вашего дерева снимков (с новыми файлами ) в динамическом представлении.

См. этот вопрос или этот вопрос .

сценарий clearfsimport лучше приспособлен для многократного импорта одного и того же набора файлов и автоматически:

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

:

 clearfsimport -preview -rec -nset c:\sourceDir\* m:\MyView\MyVob\MyDestinationDirectory
10
ответ дан 6 December 2019 в 21:18
поделиться

использовали ли вы параметр -recurse в команде clearfsimport. Пример: clearfsimport -recurse source_dir.

Это должно помочь. Если вы используете клиент Windows, щелкните правой кнопкой мыши родительскую папку, выберите «Поиск», оставьте поле имени файла пустым, нажмите «Поиск», выберите все файлы в окне результатов (ctrl-A), щелкните их правой кнопкой мыши и выберите ClearCase -> Добавить в систему управления версиями

1
ответ дан 6 December 2019 в 21:18
поделиться

Если вы находитесь в Windows, вы можете попробовать,

for /f "usebackq" %i in (`cleartool lsco -cview -me -r -s`) do cleartool ci -nc %i
1
ответ дан 6 December 2019 в 21:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: