Каково различие между кока-колой и Пепси?
хорошо, это не действительно настолько подобно, но много различий находится качественными способами. Разговор о Netbeans 6.1 и 6.5:
Netbeans имеет совсем другой UI и рабочий процесс. Нет никаких перспектив, но панели инструментов и такое автоматическое желание кажутся/скрывают по мере необходимости (т.е. отлаживающий). Процесс сборки отличается. Руководящие проекты отличаются.
Netbeans иногда фокусируется на гладком, интегрированном опыте за счет функций. Профилировщик полностью интегрируется в редактора (контекстное меню позволило Вам быстро управлять профилировщиком), но испытывает недостаток в некоторых функциях профилировщиков Eclipse.
Netbeans имеет тесно интегрированную JSP/Servlet/JSF среду разработки. Целый рабочий процесс соединяется вместе от разработки, отладки, развертывания. Это - больше "чувства", чем что-либо еще.
редактор Netbeans пропускает несколько функций Eclipse. Проверьте правописание быть одним видным. Быстрый завершенный (Ctrl-K, Ctrl-J) недогруженная функция Netbeans. Отрывки, являющиеся другим (хотя у них есть шаблон автоматического заполнения, который заполняет различную, но подобную нишу).
Меньше выбора. Если Вам не нравится один из включенных инструментов, маловероятно, что Вы найдете хороший альтернативный плагин.
Matisse. Редакторы GUI Eclipse начали нагонять, но они не просто никакое сравнение с Matisse. Поверхностно, они кажутся эквивалентными...
<sarcasm>
Ваши друзья высмеют Вас. </sarcasm>
Функция realpath ()
сообщает вам путь к файлу, когда все символические ссылки разрешены. Это не обязательно абсолютный путь, если значение, которое вы предоставляете, является относительным именем, но это частично зависит от того, пересекаете ли вы какие-либо символические ссылки с абсолютными именами для значения ссылки - если вы это сделаете, то в конце концов вывод будет абсолютным именем . Кроме того, если относительное имя проходит до корневого каталога (или «за его пределами», как в «../../../../../ ..», когда только три уровня в иерархии каталогов).
Возможно, на вашем компьютере уже есть программа realpath. Вот (нестандартная) версия, которую я написал.
/*
@(#)File: $RCSfile: realpath.c,v $
@(#)Version: $Revision: 1.3 $
@(#)Last changed: $Date: 2007/10/23 20:23:44 $
@(#)Purpose: Command to evaluate realpath(3) on given arguments.
@(#)Author: J Leffler
@(#)Copyright: (C) JLSS 2007
@(#)Product: :PRODUCT:
*/
/*TABSTOP=4*/
#if __STDC_VERSION__ >= 199901L
#define _XOPEN_SOURCE 600
#else
#define _XOPEN_SOURCE 500
#endif /* __STDC_VERSION__ */
#include <unistd.h>
#include <limits.h>
#include <stdio.h>
#include <stdlib.h>
#include "stderr.h"
static const char optstr[] = "hlsV";
static const char usestr[] = "[-hslV] given-path [...]";
static const char hlpstr[] =
" -h Print this help message\n"
" -l Long format: print given-path and real-path\n"
" -s Short format: print just real-path\n"
" -V Print version and exit\n"
;
enum { FMT_LONG, FMT_SHORT };
static int format_type = FMT_LONG;
#ifndef lint
/* Prevent over-aggressive optimizers from eliminating ID string */
extern const char jlss_id_realpath_c[];
const char jlss_id_realpath_c[] = "@(#)$Id: realpath.c,v 1.3 2007/10/23 20:23:44 jleffler Exp $";
#endif /* lint */
static int eval_realpath(const char *given)
{
char realname[_POSIX_PATH_MAX];
int rc = 0;
if (realpath(given, realname) == 0)
{
rc = -1;
err_sysrem("failed to resolve real path name for %s\n", given);
}
else if (format_type == FMT_SHORT)
printf("%s\n", realname);
else
printf("%s %s\n", given, realname);
return(rc);
}
int main(int argc, char **argv)
{
int i;
int rc = EXIT_SUCCESS;
int opt;
err_setarg0(argv[0]);
while ((opt = getopt(argc, argv, optstr)) != -1)
{
switch (opt)
{
case 'V':
err_version("REALPATH", &"@(#)$Revision: 1.3 $ ($Date: 2007/10/23 20:23:44 $)"[4]);
break;
case 'h':
err_help(usestr, hlpstr);
break;
case 'l':
format_type = FMT_LONG;
break;
case 's':
format_type = FMT_SHORT;
break;
default:
err_usage(usestr);
break;
}
}
for (i = optind; i < argc; i++)
{
if (eval_realpath(argv[i]) != 0)
rc = EXIT_FAILURE;
}
return(rc);
}
Мне она понадобилась для тестирования некоторого программного обеспечения, которое оценивало безопасность пути, и нужно было убедиться, что мой код оценивает данный путь к тому же разрешенному месту, что и realpath ()
. Вероятно, было бы разумно расширить его с помощью опции '-a', чтобы имена были сопоставлены с абсолютными именами (путем добавления префикса результата getcwd ()
к относительным путям).
(Источник для stderr .c, stderr.h можно найти в Интернете, если вы знаете, где искать. Или свяжитесь со мной - см. мой профиль.)
Функция realpath ()
не описана в стандарте C. Однако он описан в POSIX 1997 и POSIX 2008 . Если вы это имеете в виду, то вот пример:
#include <limits.h> /* PATH_MAX */
#include <stdio.h>
#include <stdlib.h>
int main(void) {
char buf[PATH_MAX]; /* PATH_MAX incudes the \0 so +1 is not required */
char *res = realpath("this_source.c", buf);
if (res) {
printf("This source is at %s.\n", buf);
} else {
perror("realpath");
exit(EXIT_FAILURE);
}
return 0;
}
PATH_MAX определен в
Вот так:
int main(int argc, char *argv[]) {
...
char *symlinkpath = argv[1];
char actualpath [PATH_MAX];
char *ptr;
ptr = realpath(symlinkpath, actualpath);
...
}
Заимствовано из здесь