2015-09-20 4 views
0

Я пытаюсь использовать chdir, чтобы изменить рабочий каталог моего процесса. Скажем, у меня есть каталог apple в моем текущем каталоге. Почему, когда я вводил apple в приглашении, возвращаемый результат равен -1? Это связано с тем, что когда я вхожу в яблоко, символ «\ n» также помещается в конец строки? Кроме того, в чем смысл изменения каталога, если я могу просто использовать переменную для ее сохранения?Как использовать системную функцию chdir

#include<stdio.h> 
#include<string.h> 
#include<errno.h> 
#include<unistd.h> 

int main(void){ 
    char path[256]; 
    fgets(path, 256, stdin); 
    printf("%s", path); 
    int result = chdir(path); 
    if(result != 0){ 
     printf("%d\n", result); 
    } 
} 
+1

Для 'chdir()' см. Здесь: http://man7.org/linux/man-pages/man2/chdir.2.html или введите 'man 2 chdir' на консоль. – alk

+0

Ваша правильная информация о переменной «путь», содержащей новую строку. Существует несколько способов устранения новой строки. Я использую: 'char * newline = strstr (путь," \ n "); if (newline) {* newline = '\ 0';} ' – user3629249

+0

Примечание: поскольку программа запускается в отдельном процессе, когда программа завершается, текущий рабочий каталог будет таким же, как и до запуска программы. – user3629249

ответ

4

fgets() суффиксов результат с мощи (если не EOF получено не было) прочитать новую строку (\n на IXish систем) и передавая это chdir() делает последнюю заслонку в качестве имени каталога, чтобы изменить к большинство likley не имеет задней новой линии.

От man fgets() (Курсив от меня):

fgets() считывает максимум один меньше символов размера из потока и сохраняет их в буфер, на который указывает с. Чтение останавливается после EOF или новой строки. Если прочитана новая строка, она сохраняется в буфере.


Замечание по отладке: Если вы хотите поставить «строку» для печати (как читать fgets()) в кавычках, как этот

printf("'%s'", path); 

вы могли заметить, задний \n ,

+0

Я вижу, но можете ли вы сказать мне, что делает chdir на самом деле? Потому что я пишу назначение для реализации функции cd оболочки? –

+0

@lplouis: 'chdir()' изменяет текущий рабочий каталог процесса. – alk

+2

Nitpick: 'fgets (3)' не * суффикс результата с '\ n' *. Он просто копирует его из ввода в буфер. Если 'EOF' достигнут без' \ n', буфер не будет иметь завершающую новую строку - ваш ответ, похоже, говорит иначе. –

Смежные вопросы