리눅스

sol4

정지홍 2023. 4. 16. 23:23

1번

//uname함수이용해 myuname명령 만들기
#include <sys/utsname.h>
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
int main(int argc, char *argv[]){
    
    if (argc!=2){
        printf("error\n");
        exit(1);
    }
    
    struct utsname uts;
    int n;

    if(uname(&uts)==-1){
        perror("uname ");
        exit(1);
    }

    while( (n=getopt(argc,argv,"asnrvm"))!=-1 ){
        switch(n){
            case 's':
                printf("Osname : %s\n",uts.sysname);
                break;
            case 'n':
                printf("Nodename : %s\n",uts.nodename);
                break;
            case 'r':
                printf("release : %s\n",uts.release);
                break;
            case 'v':
                printf("version : %s\n",uts.version);
                break;
            case 'm':
                printf("machine : %s\n",uts.machine);
                break;
            case 'a':
                printf("Osname : %s\n",uts.sysname);
                printf("Nodename : %s\n",uts.nodename);
                printf("release : %s\n",uts.release);
                printf("version : %s\n",uts.version);
                printf("machine : %s\n",uts.machine);
                break;
            default:
                printf("wrong!\n");
                break;
        }

    }
    return 0;
}

2번

#include <sys/systeminfo.h>
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
int main(int argc , char *argv[]){

    if(argc!=2){
        printf("error!\n");
        exit(1);
    }

    char buf[257];

    while( (n=getopt(argc,argv,"asnrvm"))!=-1 ){
        switch(n){
           
            case 's':
                if(sysinfo(SI_SYSNAME,buf,257)==-1){
                    perror("sysinfo");
                    exit(1);
                }
                printf("Osname : %s\n",buf);
                break;
           
            case 'n':
                if(sysinfo(SI_HOSTNAME,buf,257)==-1){
                    perror("sysinfo");
                    exit(1);
                }
                printf("Nodename : %s\n",buf);
                break;
           
            case 'r':
                if(sysinfo(SI_ARCHITECTURE,buf,257)==-1){
                    perror("sysinfo");
                    exit(1);
                }
                printf("release : %s\n",buf);
                break;
           
            case 'v':
                if(sysinfo(SI_VERSION,buf,257)==-1){
                    perror("sysinfo");
                    exit(1);
                }
                printf("version : %s\n",buf);
                break;

            case 'm':
                if(sysinfo(SI_HW_SERIAL)==-1){
                    perror("sysinfo");
                    exit(1);
                }
                printf("machine : %s\n",buf);
                break;
            case 'a':
                if(sysinfo(SI_SYSNAME,buf,257)==-1){
                    perror("sysinfo");
                    exit(1);
                }
                printf("Osname : %s\n",buf);


                break;
            default:
                printf("wrong!\n");
                break;
        }

    }


}

3번

//사용자가 입력한 로그인ID의 길이가 시스템의 최대 로그인명보다 긴지 확인
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>
int main(int argc , char *argv[]){
    if (argc!=2){
        printf("error!\n");
        exit(1);
    }
    int x=strlen(argv[1]);

    printf("%d %ld\n",x,sysconf(_SC_LOGIN_NAME_MAX));


    return 0;
}

4번