putpwent(3)
ÃÑ ÆäÀÌÁö ¼ö : 3224

Àüü ÇÔ¼ö/¿ë¾î»çÀü
Facebook Joinc ±×·ì   Joinc QA »çÀÌÆ®



joinc´Â Firefox¿Í chrome¿¡¼­ Å×½ºÆ® Çß½À´Ï´Ù. IE¿¡¼­´Â Å×À̺íÀÌ ±úÁö°Å³ª À̹ÌÁö°¡ º¸ÀÌÁö ¾ÊÀ» ¼ö ÀÖ½À´Ï´Ù. ƯÈ÷ ±¸±Û DocsÀ̹ÌÁöÀÇ °æ¿ì ¿¢¹Úó¸®µÉ ¼ö ÀÖ½À´Ï´Ù.
docbook ¿øº»
putpwent

1장. putpwent

À¯Àú ÆÐ½º¿öµå Á¤º¸¸¦ ÆÄÀÏ¿¡ ¾´´Ù.


1.1. »ç¿ë¹ý

#include <pwd.h>
#include <stdio.h>
#include <sys/types.h>

int putpwent(const struct passwd *p, FILE *stream);
		


1.2. ¼³¸í

putpwent()ÇÔ¼ö´Â stream¿¡ ¿¬°áµÈ ÆÄÀÏ¿¡ ÆÐ½º¿öµå ±¸Á¶Ã¼ Á¤º¸p¸¦ ÀÌ¿ëÇØ¼­ ÆÐ½º¿öµå³»¿ëÀ» Ãß°¡ÇÑ´Ù.

passwd±¸Á¶Ã¼´Â <pwd.h>¿¡ ´ÙÀ½°ú °°ÀÌ Á¤ÀǵǾî ÀÖ´Ù.

struct passwd {
        char    *pw_name;       /* user name */
        char    *pw_passwd;     /* user password */
        uid_t   pw_uid;         /* user id */
        gid_t   pw_gid;         /* group id */
        char    *pw_gecos;      /* real name */
        char    *pw_dir;        /* home directory */
        char    *pw_shell;      /* shell program */
};
		


1.3. ¹Ýȯ°ª

¼º°øÇÒ°æ¿ì 0À» ½ÇÆÐÇßÀ»°æ¿ì¿¡´Â -1À» ¹ÝȯÇϸç, Àû´çÇÑ errno °ªÀ» ¼³Á¤ÇÑ´Ù.


1.4. ¿¡·¯

EINVAL

À߸øµÈ °ªÀÌ ÀÎÀÚ·Î »ç¿ëµÇ¾ú´Ù.


1.5. ¿¹Á¦

#include <pwd.h>
#include <unistd.h>
#include <stdio.h>

#define USER_DEFAULT_DIR "/home/%s"
#define USER_DEFAULT_SHELL "/bin/sh"
void help()
{
    fprintf(stderr, "Usage: useradd2 [username] -d usr_dir -s usr_shell\n");
}

int main(int argc, char **argv)
{
    int opt;
    struct passwd lpass; 
    char user_dir[80];
    char user_name[32];
    FILE *pwfp;

    memset((void *)&lpass, 0x00, sizeof(lpass));
    while((opt = getopt(argc, argv, "s:d:h")) != -1)
    {
        switch(opt)
        {
            case 's':
                lpass.pw_shell = optarg; 
                break;
            case 'd':    
                lpass.pw_dir = optarg; 
                break;
            case 'h':
                help();
                exit(0);
                break;
            case '?': 
                help();
                break;
        }
    }

    if (optind > argc)    
    {
        snprintf(user_name, 32, "%s", argv[optind]);
        lpass.pw_name = user_name;
    }
    else
    {
        help();
        exit(1);
    }

    if(!lpass.pw_dir)
    {
        sprintf(user_dir, USER_DEFAULT_DIR, user_name);
        lpass.pw_dir = user_dir;
    }
    if(!lpass.pw_shell)
    {
        lpass.pw_shell = USER_DEFAULT_SHELL;
    }     
    printf("User id    : %s\n", lpass.pw_name);
    printf("User shell : %s\n", lpass.pw_shell);
    printf("User dir   : %s\n", lpass.pw_dir);

    pwfp = fopen("/etc/passwd", "a");
    putpwent(&lpass, pwfp);
    fclose(pwfp);
}
		
fopen()À» ÅëÇÏ¿© ÆÄÀÏÀ» ¿­¶§ "w"·Î ¿­Áö ¾Êµµ·Ï ÁÖÀÇÇØ¾ß ÇÑ´Ù. ±×·² °æ¿ì ±âÁ¸ ÆÄÀÏÀÇ ³»¿ëÀ» ¸ðµÎ ÀÒ¾î¹ö¸®°Ô µÈ´Ù.

±×¸®°í À§ÀÇ ÇÁ·Î±×·¥Àº ÀÛµ¿¹æ½Ä¸¸À» ¼³¸íÇÏ´Â ¼öÁØÀÇ ÇÁ·Î±×·¥ÀÌ´Ù. Á¦´ë·Î ÀÛµ¿Çϵµ·Ï ¸¸µé·Á¸é getpwent(3)µîÀÇ ÇÔ¼ö¸¦ ÀÌ¿ëÇØ¼­ ÆÐ½º¿öµå ¸ñ·ÏÀ» °¡Á®¿À°í Áߺ¹µÈ À̸§ÀÌ ÀÖ´ÂÁö È®ÀÎÇϰí, uid¿Í gid¸¦ °áÁ¤ÇÏ´Â µîÀÇ ·çƾÀÌ Æ÷ÇԵǾî¾ß ÇÑ´Ù. putpwent()ÇÔ¼ö´Â uid¿Í gid¸¦ °áÁ¤ÇØ ÁÖÁö ¾Ê±â ¶§¹®ÀÌ´Ù.

EmailÀ» ±âÀÔÇϸé, ´ñ±ÛÀÌ ¸ÞÀÏ·Î Àü´ÞµË´Ï´Ù.