getspent(), getspent_r()

Получить запись из базы данных теневых паролей

Прототип:

#include <sys/types.h>
#include <shadow.h>
struct spwd * getspent( void );
struct spwd * getspent_r( struct spwd *result,
char *buffer,
int buflen );

Эти аргументы применимы только к getspent_r():

Аргументы:

result
Указатель на структуру struct spwd, где функция может хранить запись.
buffer
Область памяти, которую функция может использовать для выделения памяти, на которую ссылается структура struct spwd. Существует возможность определить максимальный размер, необходимый для данной области памяти путем вызова sysconf() с аргументом _SC_GETPW_R_SIZE_MAX.
bufsize
Размер области памяти (в символах), на которую указывает buffer.

Библиотека:

libc

Описание:

Функции getspent() и getspent_r() возвращают следующую запись из базы данных теневых паролей. Функция getspent() использует статический буфер, который перезаписывается при каждом вызове.


Note: Функции fgetspent(), getspent() и getspnam() разделяют один общий статический буфер.

Возвращаемое значение:

Функция getspent() возвращает указатель на структуру struct spwd, содержащую следующую запись из базы данных теневых паролей. При первом вызове getspent(), база данных открывается и остается открытой до тех пор, пока либо не будет возвращено значение NULL для обозначения конца файла, либо не будет вызвана endspent().

Коды ошибок:

Функция getspent() вызывает следующие функции, и как следствие, errno может быть установлен в одном из этих вызовов:

Примеры:

#include <stdio.h>
#include <stdlib.h>
#include <pwd.h>
#include <shadow.h>
/*
* This program loops, reading a login name from standard
* input and checking to see if it is a valid name. If it
* is not valid, the entire contents of the name in the
* password database are printed.
*/
int main( int argc, char **argv )
{
struct spwd *sp;
char buf[80];
setpwent();
while ( gets( buf ) != NULL )
{
if ( (sp = getspnam( buf )) != (struct spwd *)0 )
{
printf( "Valid login name is: %s\n", sp->sp_namp );
} else {
setspent();
while ( (sp = getspent()) != (struct spwd *)0 )
printf( "%s\n", sp->sp_namp );
endspent();
}
}
endpwent();
return (EXIT_SUCCESS);
}

Классификация:

Unix

getspent()

Безопасность использования
Точка остановки потока
Да
Обработчик прерываний
Нет
Обработчик сигналов
Нет
В потоке
Нет

getspent_r()

Безопасность использования
Точка остановки потока
Да
Обработчик прерываний
Нет
Обработчик сигналов
Нет
В потоке
Да

Тематические ссылки:

struct spwd, errno, fgetspent(), getgrent(), getlogin(), getspnam(), getpwuid(), putspent(), setspent()




Предыдущий раздел: Описание API системной библиотеки