Выделил len байтов, а обращаешься в строке buffer[len] = '\0'; к len+1 байту. В 99% все будет работать нормально, тк алокатор обычно выделяет слегка больше памяти чем запрашивается. Но это баг.
Я думаю С++ для таких вещей более популярен (бусты всякие есть и либ куча разных) и понятен большинству. Возможно Objective C и хорошо подходит для таких задач, но это все равно мне кажется необычным.
А я как то посмотрел презентацию эпла года 2009 про clang, что собранное им типа ssl быстрее работает процентов на 20 и еще куча софта, чем gcc. Решил проверить на своем коде. Собранное версией 2.8 работало раза в 1.5 медленнее, чем с gcc.
Про alloca вроде всем известно. Им только нужно аккуратно пользоваться. Лучше для массивов делать int abc[new_size + old_size + etc..]; тк при неаккуратном вызове alloca в цикле например, можно устроить переполнение стека.
В принципе странно делать обработку подобных сигналов. А если в обработчике произойдет SIGSEGV? Вместо распечатки stack-trace проще посмотреть на корку и попытаться все понять.
Ну вообще для объединения кучи файлов есть tar. Архивирование должно давать выигрышь в скорости, тк жеские диски практически не развиваются в плане скорости.
ITerm2 — консоль, чуть более навороченная чем стандартная, sublime 2 — текстовый редактор, firefox, thunderbird, clementine — более-менее нормальный музыкальный плеер, mplayerx — нормальный видео плеер, eiskaltdc++ DC клиент.
if(config.respawn) { // как раз и означает запуск этого процесса
while(true) {
pid_t pid = fork();
if (pid < 0) {
err = -errno;
log_sys_err(«error in fork»);
return err;
}
if (pid == 0)
break;
int status = 0;
if (waitpid(pid, &status, 0) < 0) {
err = -errno;
log_sys_err(«error in waitpid»);
return err;
}
int sig = WTERMSIG(status);
if (!sig)
_exit(0);
Если файлы ты кидаешь копированием, то IN_CREATE неправильно использовать в данном случае. Данные код будет отлавливать только мув-ы и линк-и. С копированием будут ошибки, тк ты будешь открывать недозаписанный файл.
Еще минус, крепление, липучка от шлема довольно легко отваливается. То есть у нас камера отваливалась во время катания на сноуборде. При температуре около нуля разряжается минут за 40.
После 1 форка, но до запуска процесса мониторинга.
if (prctl(PR_SET_DUMPABLE, config.coredump != COREDUMP_OFF) < 0) {
err = -errno;
log_sys_err(«prctl(PR_SET_DUMPABLE, ...)»);
return err;
}
if(config.respawn) { // как раз и означает запуск этого процесса
while(true) {
pid_t pid = fork();
if (pid < 0) {
err = -errno;
log_sys_err(«error in fork»);
return err;
}
if (pid == 0)
break;
int status = 0;
if (waitpid(pid, &status, 0) < 0) {
err = -errno;
log_sys_err(«error in waitpid»);
return err;
}
int sig = WTERMSIG(status);
if (!sig)
_exit(0);
int core = WCOREDUMP(status);
log_err(«daemon killed: %s (core %sdumped)»,
strsignal(sig), (core? "": «not „));
if(core && config.coredump == COREDUMP_ONCE)
if(prctl(PR_SET_DUMPABLE, 0) < 0)
log_sys_err(“prctl(PR_SET_DUMPABLE, 0)»);
}