Как знать то, что означает 'errno'?

Вы можете использовать отрицательный взгляд за спиной :

let regEx = "(?<!((https|http)://))((\\w|-)+)(([.]|[/])((\\w|-)+))+"

Таким образом, с учетом этих строк:

let string1 = "https://www.google.com"
let string2 = "stackoverflow.com/questions/54269877/regex-for-specific-urlfield"

Результат оценки их с тем же предикатом: [117 ]

let predicate = NSPredicate(format:"SELF MATCHES %@", argumentArray:[regEx])

даст ожидаемые результаты:

predicate.evaluate(with: string1)  //false
predicate.evaluate(with: string2)  //true
207
задан Peter Mortensen 17 February 2015 в 14:01
поделиться

9 ответов

Можно использовать strerror() для получения человекочитаемой строки для кода ошибки. Это - та же строка, распечатанная perror() , но полезно при форматировании сообщения об ошибке для чего-то другого, чем вывод стандартной погрешности.

, Например:

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

/* ... */

if(read(fd, buf, 1)==-1) {
    printf("Oh dear, something went wrong with read()! %s\n", strerror(errno));
}

Linux также поддерживает явно ориентированный на многопотоковое исполнение вариант strerror_r().

320
ответ дан Commodore Jaeger 23 November 2019 в 04:42
поделиться

Это означает:

Файл или каталог, не найденный.

0
ответ дан Peter Mortensen 23 November 2019 в 04:42
поделиться

Когда Вы будете использовать strace (на Linux) для выполнения двоичного файла, он произведет возвраты из системных вызовов и что означает код ошибки. Это может иногда быть полезно для Вас.

0
ответ дан Peter Mortensen 23 November 2019 в 04:42
поделиться

Звоните

perror("execl");

в случае ошибки.

Образец:

if(read(fd, buf, 1)==-1) {
    perror("read");
}

страницы справочника errno(3) и perror(3) интересны, также...

2
ответ дан Peter Mortensen 23 November 2019 в 04:42
поделиться

Я использую следующий сценарий:

#!/usr/bin/python

import errno
import os
import sys

toname = dict((str(getattr(errno, x)), x) 
              for x in dir(errno) 
              if x.startswith("E"))
tocode = dict((x, getattr(errno, x)) 
              for x in dir(errno) 
              if x.startswith("E"))

for arg in sys.argv[1:]:
    if arg in tocode:
        print arg, tocode[arg], os.strerror(tocode[arg])
    elif arg in toname:
        print toname[arg], arg, os.strerror(int(arg))
    else:
        print "Unknown:", arg
3
ответ дан 23 November 2019 в 04:42
поделиться

Вот документация . Это должно сказать Вам, что это означает и что сделать с ними. Необходимо избегать использования числового значения и использовать константы, перечисленные там также, поскольку число может измениться между различными системами.

5
ответ дан Peter Mortensen 23 November 2019 в 04:42
поделиться

Существует несколько полезных функций для контакта с errno с. (Только для прояснения они встроены к libc - я просто обеспечиваю демонстрационные реализации, потому что некоторые люди находят код чтения более четким, чем чтение английского языка.)

#include <string.h>
char *strerror(int errnum);

/* you can think of it as being implemented like this: */
static char strerror_buf[1024];
const char *sys_errlist[] = {
    [EPERM]  = "Operation not permitted",
    [ENOENT] = "No such file or directory",
    [ESRCH]  = "No such process",
    [EINTR]  = "Interrupted system call",
    [EIO]    = "I/O error",
    [ENXIO]  = "No such device or address",
    [E2BIG]  = "Argument list too long",
    /* etc. */
};
int sys_nerr = sizeof(sys_errlist) / sizeof(char *);
char *strerror(int errnum) {
    if (0 <= errnum && errnum < sys_nerr && sys_errlist[errnum])
        strcpy(strerror_buf, sys_errlist[errnum]);
    else
        sprintf(strerror_buf, "Unknown error %d", errnum);
    return strerror_buf;
}

strerror возвраты строка, описывающая код ошибки, Вы передали ему. Осторожность, это не поток - или безопасный от прерывания; это свободно переписать строку и возвратить тот же указатель на следующем вызове. Используйте strerror_r, если необходимо волноваться об этом.

#include <stdio.h>
void perror(const char *s);

/* you can think of it as being implemented like this: */
void perror(const char *s) {
    fprintf(stderr, "%s: %s\n", s, strerror(errno));
}

perror распечатывает сообщение, которое Вы даете ему, плюс строка, описывающая ток errno, к стандартной погрешности.

7
ответ дан ephemient 23 November 2019 в 04:42
поделиться

Код ошибки 2 означает "Файл/Каталог, не найденный". В целом Вы могли использовать функция perror для печати человекочитаемой строки.

20
ответ дан schnaader 23 November 2019 в 04:42
поделиться

Вместо того, чтобы работать perror на любом коде ошибки Вы добираетесь, можно получить полный список errno значения в системе со следующей остротой:

cpp -dM /usr/include/errno.h | grep 'define E' | sort -n -k 3

53
ответ дан Josh Kelley 23 November 2019 в 04:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: