2014-11-04 3 views
0

Я пытаюсь изменить каталог моего терминала linux с помощью языка c. Дело в том, что я использую потоки. Я попытался использовать chdir(), но его не работает, n да chdir() также является функцией процесса. На самом деле вещь, которую я пытаюсь реализовать, я пытаюсь создать многопоточную программу, которая компилирует ядро ​​Linux, и это невозможно без указания каталогов (я пытался это сделать без указания каталогов, но не удалось :))изменить каталог терминала с помощью языка c

Может кто-нибудь помочь мне с этой проблемой?

Заранее спасибо

+0

Давая некоторый пример кода, который вы используете может быть полезным. Я понимаю, что по умолчанию конфигурация ядра Linux создает Makefile, который затем может быть выполнен параллельно, используя 'make -jN' с N заданиями. Предполагая, что это невозможно (по какой-то причине, возможно, описать?), Я бы предположил, что подобный подход с использованием относительных путей может быть использован из некоторого «родительского» каталога сборки? – chrisb2244

+0

Почему 'chdir()' не работает? Можете ли вы опубликовать более подробную информацию, например, errno, когда она терпит неудачу, или она не меняет каталог для вас? – SSC

+0

chdir() действует как ничего не произошло .. нет ошибки нет изменения каталога нет ничего .. ничего не делает – user2353613

ответ

4

Вы не можете! Никакой процесс не может изменить рабочий каталог другого. Процесс может изменить только собственный WD. Когда вы запускаете внешнюю команду, такую ​​как ваша программа на C, запускается новый процесс. Команда вашей оболочки является внутренней.

+0

Я не работаю с процессами. Я занимаюсь потоками. – user2353613

+0

Должен быть какой-то способ chnge path с помощью c:? – user2353613

+1

Поток - это всего лишь часть процесса, и для каждого процесса существует только один текущий каталог. Изменение текущего каталога в потоке изменяет текущий каталог всего процесса. Это не рекомендуется. –

0

Не совсем понятно, чего вы пытаетесь достичь. Похоже, что вы хотите эмулировать поведение скрипта (или инструмента make) с использованием программы C, то есть иметь программу C, которую вы написали, запускать новые процессы (используя system или, возможно, комбинацию fork10 и exec*). Если это так, то то, что вы на самом деле хотите, - это изменить переменные среды этих процессов, чтобы найти нужные им файлы. Разветвленный процесс наследует среду его родителя, поэтому все, что вам нужно, - это использовать getenv, putenv, setenv и unsetenv для извлечения и установки переменных среды, которые вы хотите добавить, обновить или удалить; или вы можете использовать конкретные execve, execvpe, которые позволяют точно указать, какая среда должна быть доступна новой программе.

ссылки: