файлы на нескольких процессах

Вместо того, чтобы включать ваш библиотечный Makefile lib/mylib/Makefile, вы можете использовать рекурсивный MAKE, запустив

$(MAKE) -C ../../lib/mylib/Makefile

из Makefile вашего основного модуля modules/mymodule/Makefile.

Вы можете использовать аналогичные решения для целей clean или distclean

Вы можете использовать фальшивую цель mylib, например:

.PHONY: mylib all clean
LIBDIR=../../lib/mylib

all: mymodule

mymodule: mylib
        ...

mylib:
        $(MAKE) -C $(LIBDIR)

clean:
        $(MAKE) -C $(LIBDIR) $@
        ...

Примечание: если вы копируете код из этого примера в Makefile, измените отступ, чтобы использовать табуляцию вместо пробелов.

Вы также можете рассмотреть возможность использования верхнего уровня Makefile в trunk, который рекурсивно вызывает make в lib/mylib и modules/mymodule.

См. Также https://www.gnu.org/software/make/manual/make.html#Recursion

Некоторые считают рекурсивное создание вредным, но это зависит от того, как именно вы используете его.

5
задан Liran Orevi 22 April 2009 в 19:35
поделиться

3 ответа

Нет, другие процессы могут изменять содержимое файла во время его чтения. Попробуйте запустить "man fcntl" и игнорировать раздел о "консультативных" блокировках; это «необязательные» блокировки, на которые процессам следует обращать внимание, только если они этого хотят. Вместо этого ищите (увы, не POSIX) «обязательные» блокировки. Эти защитят вас от других программ. Попробуйте заблокировать чтение.

3
ответ дан 14 December 2019 в 09:00
поделиться

No, if you open a file, other processes can write to it, unless you use a lock.

On Linux, you can add an advisory lock on a file with:

#include <sys/file.h>

...

flock(file_descriptor,LOCK_EX); // apply an advisory exclusive lock
2
ответ дан 14 December 2019 в 09:00
поделиться

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

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

Лучшая идея - не предоставлять права на запись процессам, которые вы не хотите записывать в файл.

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

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

2
ответ дан 14 December 2019 в 09:00
поделиться
Другие вопросы по тегам:

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