Решаю задачку о переводе скрипта Shell (UNIX4) в прогу на си. Все вроде нормально, пока не увидел такую конструкцию: Код (Text): if test условие then что-то сделать Как это реализовать на си, чтоб было по короче?
nester7 там if test То есть идет обращение к test. Одной строкой можно проверить наличие чего-то в системе, проверить файл на запускаемость или даже проверить заголовок файла (Определить формат). Test - это почти ключевая операция. Есть ли в си ее аналог? А если нет, то как выполнить тот или иной стандартный системный тест наиболее коротким способом?
Собсно, тогда никак Можно написать функцию, аналог test и реализовать в ней условия, которые проверяются в твоем скрипте. (Исходники test в помощь? Кстати, а что такое "стандартный системный тест"? В общем, я понял что нужно - я пас.
Код (Text): ... struct utsname uts; uname (&uts); printf ("%s","checking for your environment is SANE\n"); printf ("checking for hostname.....%s\n",uts.nodename); // имя хоста printf ("checking for CPU type....%s\n", uts.machine); // тип процессора printf ("checking for terminal you are using....%s\n", getenv("TERM")); //Какой терминал используется // checking for... бла бла бла ...
Ну, назвать это стандартным системным тестом у меня язык не повернется Это просто аналог GetSystemInfo() из мира Windows. В unix общую информацию выдает uname, в Windows - systeminfo. Её для того и написали, чтобы не гемороиться на Си
есть вариант связаться с аклокалом и выполнить AC_CHECK_что-то (char *как-то, char *зачем-то); только как?
Уже рассматривал.... Как крайний вариант - можно. Щас думаю на тему Aclocal: Код (Text): char *file_to_check; int is_exists = @FILE_EXISTS@; if (is_exists !=-1){ file_to_check=@FILENAME@; } Конструкции - ужас, но зато все работает
более понятный код: Код (Text): if test ! -r $srcdir/$ac_unique_file; then if test "$ac_srcdir_defaulted" = yes; then { echo "$as_me: error: cannot find sources ($ac_unique_file) in $ac_confdir or .." >&2 { (exit 1); exit 1; }; } else { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2 { (exit 1); exit 1; }; } fi fi (cd $srcdir && test -r ./$ac_unique_file) 2>/dev/null || { echo "$as_me: error: sources are in $srcdir, but \`cd $srcdir' does not work" >&2 { (exit 1); exit 1; }; }
Товарищ NoBodyZZZ правильную ссылку дал. Почти все тесты нужно выполнить. Лучший вариант - #9, но некоторорые тесты можно как предложил KInder
Короче, скачал пакет Confix - и больше ниче не надо. Все тесты, какие можно + отладка и все это на си. Заодно читаю исходник компилятора
хмм, а разве нет никакого способа в *NIX системах узнать код/флаг результата запущенной/отработанной тулзы? того же "test" к примеру.