2012-03-21 2 views
0

Здесь я использовал ниже в коде на linux. с использованием команды cp в системной функции.Какая системная функция и команда cp возвращаются в C/Linux

Я знаю о системной функции, она вернет команду 0, если успешно выполнена. В противном случае она вернет код ошибки.

Если здесь я использую надлежащий источник и назначение пути, чем я получил выход как этого

Number == 0 

Если я дать неправильный источник и пути назначения, чем я получил

cp: cannot create regular file `/home/sam/test/test': No such file or directory 
Number == 256 

cp: cannot stat `/home/sam/main/test2/test': Not a directory 
Number == 256 

Здесь я хочу знать код ошибки cp команда, что команда cp возвращает здесь.

Мои вопросы здесь

1 System function return error code of cp command? 
2 Can i get error code of cp command from source code of cp command? 
3 i want to handle all types of error in this cp command. 

код:

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

void main() 
{ 
    int a; 
    a = system("cp /home/sam/main/test /home/sam"); 
    printf("Number == %d\n",a); 
} 

Таким образом, любое тело, пожалуйста, объясните мне об этом все

+1

Пожалуйста, прекратите использование void main(). Функция main() должна возвращать int. (что произойдет, если создатели cp или sh использовали бы 'void main()'?) – wildplasser

+0

Почему бы не использовать mmap() или open()/read()/write() для копирования файлов вместо использования системы() для выполнения команды cp? – dAm2K

ответ

4

Правильный путь к пользователю возвращаемое значение системы с wait-specific macros.

if (WIFEXITED(a)) { 
    int rc; 
    rc = WEXITSTATUS(a); 
    printf("Exit with status: %d\n", rc); 
} else { 
    /* Killed by a signal. */ 
} 
+0

Как насчет моего вывода, когда команда cp терпит неудачу и дает 256? его статус команды cp или код ошибки системы funtcion? – user1089679

+0

@ user1089679 Это ничего. Это небольшое целое, которое бессмысленно без макросов, которые я вам показывал. – cnicutar

1

Людей страница system состояний:

ВОЗВРАЩАЕМОГО ЗНАЧЕНИЕ Возвращаемое значение -1 в случае ошибки (например, вилка (2) не удалось), а статус возврата команды в противном случае. Этот последний возврат статус находится в формате, указанном в ожидании (2). Таким образом, код выхода команды будет WEXITSTATUS (статус). В случае, если /bin/sh не может быть выполнен, статус выхода будет таким, как вывод команды (127).

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

Таким образом, вы можете получить статус выхода с WEXITSTATUS(a)WIFEXITED(a) при е верно.

В общем случае возможные коды выхода команды указаны в man-странице. Для cp документации нет, поэтому вы не можете положиться ни на что. Вы можете подумать о том, чтобы идти с системными командами нижнего уровня (например, open или link).

+0

Как насчет в моем выходе 256? – user1089679

1

256 обычно означает, что возник вопрос о разрешении

+0

Добро пожаловать в переполнение стека!Это не дает ответа на вопрос. Чтобы критиковать или запросить разъяснения у автора, оставьте комментарий ниже своего сообщения - вы всегда можете прокомментировать свои собственные сообщения, и как только у вас будет достаточно [репутации] (http://stackoverflow.com/faq#reputation), вы сможете [прокомментировать любое сообщение] (http://stackoverflow.com/privileges/comment). –

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