d3 выбирает попытку записи в защищенный от обновления файл

#pick

#выберите

Вопрос:

Я попытался скомпилировать простую программу, которую я написал, но я получаю следующую ошибку:

 :compile chris_programs fileprinter
fileprinter
.
[235] attempt to write into update protected file!
  

Файл chris_programs является Q-указателем на каталог /u/chris_programs.

 # pwd
/u/chris_programs
# ls -al
total 16
drwxrwxrwx    2 root     system          256 Jun 16 06:58 .
drwxrwxrwx   15 root     system         4096 Jun 13 17:40 ..
-rw-rw-rw-    1 root     system           72 Jun 16 07:03 fileprinter
  

Вот запись md для файла chris_programs:

 DICT md  'chris_programs' size = 45
01 Q
02
03 /u/chris_programs
  

Ответ №1:

Рад видеть, что вы освоились с этими супер q-указателями. Проблема здесь в том, что объектный модуль переходит в Dict файла, в котором размещен БАЗОВЫЙ источник. Но когда вы используете путь к хост-ОС без указания словаря, он не знает, куда поместить объектный код. Для этого я бы рекомендовал следующее:

 create-file dict chris_programs 3
  

(Сначала скопируйте q-указатель md на другое имя, иначе вы не сможете использовать то же имя.)

В этот файл dict будет помещен q-указатель по умолчанию, который указывает любые ссылки на файл данных обратно на dict (так что dict и data занимают одно и то же пространство). Затем вы можете скопировать q-указатель, который у вас уже есть (переименован в соответствии с указанным выше), в dict, чтобы заменить этот элемент:

 copy md renamed_pointer (o
to: (dict chris_programs
  

Итак, теперь ваш источник будет находиться в файловой системе хоста, а объект — в D3.

Существует способ иметь как dict, так и данные в ОС хоста, но на данный момент я не помню синтаксис. Я попытаюсь обновить это позже, если получу информацию.

Я не рекомендую повторять «но я действительно хочу, чтобы все было в ОС хоста!» Объектный код не служит никакой цели за пределами СУБД, поэтому вы можете также сохранить его там. Что касается источника, ну, я также поместил некоторый источник на уровне ОС для управления версиями (интеграция с Subversion), для использования с другими редакторами и для совместного использования с другими СУБД MV. Если вы не делаете что-то подобное, я бы посоветовал вам сохранить все исходные данные и объекты в СУБД. Если вам нужен лучший редактор, AccuTerm wED (редактор Windows) — это графический интерфейс с подсветкой синтаксиса и многими другими функциями. Мы можем обсудить это отдельно, если это ваша цель.


РЕДАКТИРОВАТЬ : следующее предназначено для обеспечения решения желаемой проблемы, за пределами ограничений, связанных с уже выполненными ошибочными шагами.

Давайте вернемся к основам: исходный код находится в файле данных, объект помещается в словарь. Вот как вы связываете источник уровня операционной системы с объектом уровня СУБД.

 create-file dict bp1 3
  

В этот файл dict будет помещен q-указатель по умолчанию, который указывает любые ссылки на файл данных обратно на dict (так что dict и data занимают одно и то же пространство). Вы можете заменить этот рефлексивный указатель на новую ОС хоста. Используйте ED или любой другой инструмент редактирования, который вы предпочитаете, но идея:

 ed dict bp1 bp1
  

Элемент указателя в dict имеет то же имя, что и dict. Замените этот элемент следующим:

 01 q
02
03 /path/foldername
  

Номера строк приведены только для справки, не вводите их. Замените путь по мере необходимости. Ваш пользователь D3 (как указано в файле операционной системы pick0) должен иметь r / w доступ к этому пути.

Итак, теперь вы должны быть в состоянии сделать что-то вроде этого:

 ED BP1 TEST1
01 CRT "SUCCESS"

COMPILE BP1 TEST1
RUN BP1 TEST1
  

Вы найдете TEST1 в /path/foldername . Если вы УКАЖЕТЕ DICT BP1 , вы увидите указатель BP1 на файл данных, а также элемент для объектного модуля для TEST1.

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

См. Примечание выше о «но я действительно хочу, чтобы все было в ОС хоста!»

Другой подход к управлению версиями (не тот же, но близкий): храните все в СУБД. Периодически переписывайте исходный код в файл резервной копии на уровне операционной системы или копируйте в папку. Затем управляйте версиями этих данных ОС. Это устраняет прямую связь между ОС и программами, которую большинство пользователей D3 все равно не понимают.

Комментарии:

1. У меня есть файл в ОС под названием fileprinter, расположенный в d3 в виде q-указателя с именем chris_programscopy. Я избавился от q-указателя chris_programs, а затем создал обычный файл с именем chris_programs. Затем я создал файл dict chris_programs 3 и скопировал md chris_programscopy (o (dict chris_programs . Я все еще получаю ту же ошибку, есть идеи, что я сделал не так?

2. Там многое идет не так. Давайте создадим резервную копию. Почему вы пытаетесь использовать ОС хоста для программ: если вы сохраните все это в хешированных файлах D3, все это исчезнет. Скопируйте исходный код fileprinter в элемент файла данных, затем скомпилируйте его. Модуль объекта создается в Dict. Вы можете запустить оттуда.

3. Пожалуйста, ответьте или отметьте вопрос как ответ. Спасибо.

4. Я хочу сохранить программу в ОС хоста, чтобы я мог использовать для нее контроль версий и редактировать ее с помощью реального текстового редактора. К сожалению, системный администратор не помещает wED на сервер, поэтому единственный практический способ масштабного редактирования файлов — поместить исходный код программы в ОС хоста.

5. ОК: «Итак, теперь ваш источник будет находиться в файловой системе хоста, а объект — в D3». Предоставленный ответ решает проблему. Вы можете работать с файлом данных в D3, как с хешированным файлом, даже если данные хранятся в операционной системе хоста, и вы также можете редактировать его с помощью любого внешнего инструмента. Я делаю именно это, и папка хоста сопоставляется с репозиторием subversion.