Сawk
:
LABELS='name_of_label_1 name_of_label_2...' awk '
BEGIN{split(ENVIRON["LABELS"], label)}
{
for (i = 1; i <= NF; i++)
print "# TYPE", label[i], "counter\n"label[i], $i
}' < input-file
Простой ответ заключается в том, чтобы помнить, что файловый дескриптор — это просто ссылка на фактический сокет, и вы можете иметь несколько файловых дескрипторов, ссылающихся на один и тот же сокет. Подсчет ссылок используется для завершения сокета при удалении последней ссылки.
Итак, да, вы можете dup(2)
дескриптор файла сокета.
Более подробное объяснение заключается в том, что файловый дескриптор — это просто дескриптор пространства пользователя для индексного дескриптора ядра. Ядро struct inode
имеет указатель на ядро struct socket
, которое является более высоким -уровнем, общим интерфейсом сокета.Эта структура будет иметь указатель на более низкий -уровень struct sock
, который является фактическим сокетом tcp/ip. Помните, что у вас могут быть сокеты для других семейств адресов. Обратите внимание, это объяснение все еще несколько упрощено.
Отвечая на ваш последний вопрос, оба определения верны в отношении цитаты.
Этот пост в блоге на самом деле довольно хорошо объясняет часть процесса создания сокета и выделения файлового дескриптора:https://ops.tips/blog/how-linux-creates-sockets/