parsejsonfile.c를 위한 jsmn_StringRader()



char * jsmn_StringReader(){


char * a;

char * b;

FILE *f1;

f1=fopen("library.json","r");


b=(char *)malloc(sizeof(char));

 a=(char*)malloc(sizeof(char));


while(1){

  fgets(a,sizeof(a),f1);

        if(feof(f1))break;

  b=(char*)realloc(b,strlen(b)+strlen(a));

  //printf("\n%d\n",strlen(a));

  strncat(b,a,strlen(a));

}


fclose(f1);

 return b ;

}




하나의 text파일에 대하여 하나의 char *f 변수를 잡고 해당 변수에 각 txt의 한줄 한줄을 크기에 대하여 realloc시킴으로써 저장하였다. 

feof()를 통해서 txt파일의 끝까지 읽어 주었다. 


1. 새로운 계정 만들기


$ adduser [userName]

-먼저 계정을 간단히 만든다.


2.wordpress설치

2.1    /home/jeon/www에 아래와 같은 command를 통해서 wordpress를 설치한다.....


$wget http://wordpress.org/latest.tar.gz    ->설치 파일 다운로드

$tar -xvzf latest.tar.gz    ->설치파일 압축 해제

2.2 Apache2와 연결 시켜준다(실행권한 부여)


$cd /home/jeon/www

$sudo chown www-data:www-data * -R

$sudo usermod -a -G www-data jeon

$sudo chmod -R 775 /home/jeon/www


2.3 apache2를 제사작한다

$ service apache2 restart



3.해당 계정에 대한 VIrtualHost를 설정해준다

3.1 apache2.conf설정 

$ vim /etc/apache2/apache.conf




(나의 새로운 계정은  jeon이었으며, /home/jeon/www/wordpress에 대하여 virtualhost를 설정했다)

3.2 wordpress.conf생성하기

$cd /etc/apache2/site-available/

$vim wordpress.conf


(설정 값을 다음과 같이 부여한다.)

그리고 /etc/apache2/site-available/에서 $sudo a2ensite wordpress.conf 를 통해서 ../site-enable에도 만들어주어야 virtualhost가 완벽하게 만들어진다.....


3.3 DNS를 설정한다

$vim /etc/hosts



wordpress로 접속될 DNS값을 설정한다





4. Mysql을 통해서 설치한 wordpress와 database를 연결한다

아래와 같은 방법으로 mysql에 접속한다

$mysql -u root -r

(mysql설치할때, 설정한 비밀번호로 접속하면 된다)


접속이 되었다면, database를 만들어준다

>create database wordpress;

("wordpress"라는 이름의 database를 만든 것이다)


wordpress의 database를 관리할게 될 계정을 만들어준다

>create user  jeon@localhost;

>set password for jeon@localhost=password("PASSWORD");     

(이때, "PASSWORD"는 정말 jeon@localhost의 비밀번호이기 때문에 기억 할 수있는 비밀번호를 사용하여야 한다)


이제 jeon@localhost에게 wordpress의 database의 권한을 부여한다

>grant all privileges on wordpress.* to jeon@localhost identified by 'PASSWORD';

>flush privileges;

>exit


이제 mysql의 사용자에 대한 설정이 반 끝났다.


5. 나머지 반은 이제 /home/jeon/www/wordpress의 wp-config-sample.php에 방금 설정한 user의 값을 삽이하면 된다

(이 예제는 지금, wordpress라는 database에 "jeon"의 비밀번호로 설정된  jeon@localhost가 관리를 하게 하기 이한 설정이다)

 6. 이제 wordpress에 접속하면된다....

Let's go!

(submit해도 계속 wp-config.php이야기하면서 db랑 연결이 안된다고 오류가 뜰때가있다. 즉, wp-config.php에 저장된 값들과 mysql의 db와 정보가 다른 경우를 말한다. 그런경우 mysql에 접속해서 db를 drop(삭제)하고 create(생성)한 다음 계정의 차근차근 다시 생성하면된다)

설정한 db 아이디와 비밀번호로 로그인하면 된다....













새로운 계정에 홈 디렉토리로 변경 및 name domain사용








0.새로운 계정 만들기

http://kyu-tag.tistory.com/13의 1번을 참고하여서 new user를 생성하면된다.

나 같은 경우는 user1의 홈 디렉토리를 user2의 계정으로 디렉토리를 변경하였다......(목적)





1. 새로운 index.html

새로운 홈 디렉토리를 만들기 위해서는 새로운 html을 만들어준다

지금 같은 경우는 새로운 계정에 새로운 dir을 만들고 그 위에 indext.html을 gedit을 통해서 만들어 주었다


새로운 계정은

$ sudo adduser 새로운 이름


그리고 mkdir을 통해서 user2에 www라는 폴더를 만들고

$ sudo mkdir /home/user2/www


gedit을 통해서 새로운 html을 생성했다

$ sudo gedit index.html





2.apache2.conf 수정

먼저 apache2.conf의 내용을 변경한다

$ sudo gedit /etc/apache2/apache2.conf



디렉토리 설정을 원하는 html파일이 있는 폴더로 다음과 같이 수정한다


그 다음 site-available에 있는 000-default.conf의 내용을 수정하면 된다

$ sudo gedit /etc/apache2/sites-availlable/000-default.conf


apache2.conf 수정 처럼 해당 디렉토리로 변경하면된다



3. 이제 localhost에 들어가 보자

/home/user2(해당 계정)/www/html에 info.php()도 생성해서 확인해 보면......


info.php도 생성 된 것을 알 수 있으며


localhost도 잘 돌아가는 것을 볼 수 있다


4. localhost에 named domain을 만들어보자

wow.com의 도메인을 

$ sudo gedit /etc/hosts

에 들어가서 다음과 같이 수정한다

도메인 창에 wow.com을 치면......

접속이된다........









후기: 처음 실행때는 잘 되다가 2번째대 계속 localhost에서 서버에 대한 접근의 permission이 없다하여서, chmod로 권한 설정 넓히고 구글링하다 결과적으로 고친 오류는 conf에서 수정할때 html을 hmtl의 오타가 있었다. 가끔은 오타의 문제로 프로그램에 오류가 생길 수 있으며 아무리 command 라인을 처도 뜨릴 수 도 있으니 주의하자!!! 







reference:    http://zzaps.tistory.com/242






'OSS' 카테고리의 다른 글

[jsmn] 하나의 text를 하나의 string으로 받기  (0) 2018.05.25
[Ubuntu] Wordpress 설치  (0) 2018.05.25
[ubuntu] ssh server설치 및 접속  (0) 2018.05.08
[Ubuntu]hostname 변경  (0) 2018.05.07
[Ubuntu] Package tool&Network status  (0) 2018.05.07

ssh Server 설치 & 접속


1. ssh에 접속하게 될 계정을 생성한다

user2를 새로 생성하는 command이다


$ sudo adduser user2


그러면 다음 과 같은 사진을 통해서 user에 대한 비밀번호와 기본 정보들을 입력한다



2. ssh를 설치하자


$ sudo apt-get install ssh

install를 하고 위에서 만든 계정으로 로그인을 해보면.......

성공

3. VM에서가 아닌 (ubuntu에서 말고 ) host 컴퓨터에서 접속 해보자

1. 먼저 현재의 ubuntu를 종료한다 (그래야 나중에 어덥터를 추가 할 수 있다)

2. VM에서 전역 도구에 들어가 네트워크를 생성한다

3.머신 도구에 들어가서 해당 vm의 설정에 네트워크 값을 아래와 같이 설정한다


termianl에서 ifconfig를 통해서 새로운 network가 추가된 것을 확인 할 수 있다



4.다시 ubuntu를 켜고 ifconfig를 통해서 이더넷 IP주소를 가저온다

5. host 컴퓨터에서 ssh를 통해서 해당 IP에 접속한다










reference: 

ssh 설치 및 설명:http://programmingskills.net/archives/315

계정 생성:http://mirwebma.tistory.com/112        https://jongmin92.github.io/2016/09/20/Linux%20&%20Ubuntu/add_user/

호스트 컴퓨터에서 접속: http://hongku.tistory.com/75







hostname변경







kyu-VirtualBox가 hostname이 된다. hostname을 바꾸는 이유는 다른 host 이름을 구분하기 위해서이다. 


나는 원래 kyu-VirtualBox의 hostname을 halls로 바꿀 것이다



1. hostname바꾸기

설정 파일에 있는  hostname을 바꾼다

$sudo vi /etc/hostname


수전 전에는 kyu-VirtualBox였지만, 지금은 halls로 수정하였다. 

이때 주의 할 점이, 원래 hostname파일은 read only이기 때문에 sudo를 통해서 변경하여야 한다


2.sudo vi hostname

hosts에 저장 되어있는 기존의 hostname도 변경한다

$sudo vi /etc/hosts


127.0.1.1 kyu-VirtualBox    --> 127.0.1.1 halls



하지만, 위의  설정 값을 변경 하여도 여전히 hostname은 kyu-VirtualBox이다.......


3. reboot하면 끝이다

구글링해서 찾아 보니깐, service hostname restart를 통하면 reboot를 사용하지 않고도 hostname이 변경된것을 알 수 있다는데 계속 "Failed restart hostname.service: Unit hostname.service is masked" 떠서 reboot을 하였다



0. 번외


그냥  $hosnamectl set-hostname 새로운 이름  하고 reboot하면 hostname이 바뀌어 있다. 단, /etc/hostname에는 바뀌어있으나, /etc/hosts에는 변경되어 있지 않다.




reference:

http://dreamlog.tistory.com/374

http://sarghis.com/blog/831/





Package


apt(advanced Packaging tool)

-apt-get: 팩키지 관리 명령어 도구이다.


sudo apt-get update:  /etc/apt/source.list 로부터 index를 가져와서 update를 한다.

sudo apt-get upgrade: 설치되어 있는 package를 새버전으로 업그래이드 한다

sudo apt-install 패키지이름: package 설치하는 것

sudo apt-get autoremove 패키지이름: 내려받은 패키지 파일 중 쓸모 없는 것들만  모아둔 /var/cache/apt/archives/에서 삭제하여 디시크 공가늘 확보하는 것

sudo apt-get remove패키지이름 :package는 지우나 설정 파일은 지위지 않음(재설치가 가능하다)

sudo apt-get --purge remove 패키지 이름: 설정 파일까지 삭제함


remove와 --purge remove의 차이


-remove하는 경우 net-tool만 remove하지만, --purge remove하는 경우 net-tools와 관련된 모든 파일을 삭제한다


-apt-cache: 패키지를 검색하기 위한 command line. 

apt-cache 패키지: 사용할 수 있는 패키지를 출력한다

apt-cache search 패키지: 패키지와 관련된 패키지의 이름과 설명 출력한다

apt-cache stats: 캐시 현황 확인




sudo(superuser do)

-superuser이라면 모든 권한을 갖고 있는 user로써 모든 command를 실행하고 install까지 할 수 있다.

sudo su: 지속적으로 sudperuser로 command를 실행하는 것

exit:하면 빠져나온다 






Network


ifconfig: 네트워크 인터페이스 IP 주소와 넷마스크의 설정과 및 인터페이스 활성화/비활성화를 위해서 사용되는 command이다

(ubuntun에서 사용하려면 net-tools를 install한 후 사용가능하다)



ping: 네트워크가 살아있는지 확인하는 command이다. 즉, ping왔다리 갔다리 한다는 것은 해당 서버에 접근이 가능하다는 말이다 

-나의 localhost로 ping을 보낸 것이다

ping -c 횟수 -i 초 단위 간격  도메인 주소

(횟수를 생략하는 경우 무제한으로 가며, 초 단위를 생략하는 경우 1초단위로 설정된다)

-물론 해당 서버에서 pingd을 차단하는 경우 접속은 가능하나 ping이 안된다.


netstat: 네트워크 상태 및 프로토콜 통계를 생성하는 command. 즉, 열려있는 모든 서버와 소켓에 대한 정보를 알려주는 명령어이다. 


(소켓: 소프트웨어로 작성된 통신 접속점, 소켓을 통해서 데이터가 송수신된다)









reference:

apt-get정리: https://blog.outsider.ne.kr/346

apt-get과 apt-cache 명령어: http://www.myservlab.com/190

ifconfig: https://ko.wikipedia.org/wiki/Ifconfig

ping: https://m.blog.naver.com/PostView.nhn?blogId=diceworld&logNo=220296844545&proxyReferer=https%3A%2F%2Fwww.google.co.kr%2F

netstats: https://thebook.io/006718/part01/ch03/06/04/

소켓의 이해: http://jkkang.net/unix/netprg/chap2/net2_1.html









'OSS' 카테고리의 다른 글

[ubuntu] ssh server설치 및 접속  (0) 2018.05.08
[Ubuntu]hostname 변경  (0) 2018.05.07
[Ubuntu]Defaul page (Index.html) modify 1.01  (0) 2018.04.30
[나름해석]JSMN-kyu.version2.0-jsondump.c  (0) 2018.04.09
[Command]git 기초2  (0) 2018.04.09

VM에 Ubuntu를 통해서 서버를 구축할 것이다



0.기본 설정 

먼저 VM과 Ubuntu를 설치한다

VM: https://www.virtualbox.org/wiki/Downloads

Ubuntu: https://www.ubuntu.com/download/desktop




Mac을 사용하기 때문에 iso파일의 Ubuntud를 받았다.

VM을 먼저 설치하고 그 다음 VirtualBox에서 새로 만들기를 통해 가상의 linux OS기반의 환경을 조성한다





(계속...........)

만들어진 Linux-Ubuntu를 시작하면 아래와 같은 창이 뜨는데 아까 받은 Ubuntu를 적용 시키면 된다


그리고 Ubuntu를 깔끔하게 깔아주면 된다

깔렸다................................성공


1.APM+phpmyadmin설치

$sudo su를 통해서 root권한을 통해서 접속하면 관리하기 편한다

1.1 apache2 설치하기 

(이미 Ubuntu에 존재하는 package를 설치하는 것이다)


web browser에 127.0.0.1 혹은 localhost라고 치면, apacher2로 설정된 default page를 볼 수 있다 




1.2 mysql 설치하기

그냥 terminal 위와 같이 command를 하면 된다

이과정에서 오류가 가장 많이 나왔었다. msql에 server community에 접속할 수 없다면서 error가 지속적으로 발생해서 google에 수도 없이 검색해보았다. 답이없다 그냥, vm과 ubuntu를 다 전부 삭제하고 다시 다운로드 받고 시작하면 된다. 그래도 가끔식 안될 때 있는데 다시하면 된다.


원인은 잘 모르겠다. 맨 처음 시도 했을 때는 모든게 순조롭게 설치가 되었는데 다 삭제하고 다시 vm에서 부터 Linux-Ubuntu생성하고 나서 부터 이 부분에서 계속 설치가 안됬다. dpkg도 해보고 remove도 해봤는데 답은 그냥 완전!! 처음 부터 다시 시작하는 것이다. 


여튼, 설치가 되면.......php를 설치하기로 하자


1.3 php 설치

php는 여러 버전이 존재하는데 나는 php7.2    버전을 설치하였다


php의 package는 없기 때문에 apt에 추가하여야 설치가 가능하다!!


$sudo add-apt-repository ppa:ondrej/php

한번 update를 해주고....(저장소로부터 추가 목록을 가져오는 것)

$ sudo apt-get update

php7.2를 설치 해준다

$ sudo apt-get install php7.2 php7.2-common

php가 설치 되었는지 확인하기 위해서 phpinfo()파일을 만들어본다

$ sudo sh -c 'echo "<?php phpinfo(); ?>" > /var/www/html/info.php'


localhost/info.php에 들어가면..........





이렇게 ubuntu에 APM을 모두 설치하였다.



1.4 phpmyadmin 설치

phpmyadmin은 데이터 베이스를 관리하는 인터페이스이다

$sudo apt-get install phpmyadmin


패키지 설정에서는 apache2로 정하고--> phpmyadmin의 데이터 베이스를 dbconfig-common으로 설정하냐에 yes를 하면된다--> mysql에 등록할 password로 설정하고 설치를 마무리 하면 된다.


localhost/phpmyadmin/에 접속 하면 다음 page를 볼 수 있다


접속이 안되는 경우 http://kyu-tag.tistory.com/11 의 reference를 참고하면 깔끔히 설정할 수 있다






2. Index.html page 변경하기

현재 localhost로 되어 있는 page를 변경해 보겠다.

web browser에 localhost라고 치면 apache2로 된 default page가 뜬다. 자세히보면 

/var/www/html/index.html을 replace하라고 되어 있다. 하지만 실제로 terminal로 들어가게되면, 변경할 수 가 없다. readonly이기 때문이다. 

그래서 권한을 chmod index.html 777로 바꾸고 (777이면 다른 사람도 modify 할 수 있기 때문에 조심하여라) 

을 통해서 html 파일을 변경하여라 (vim을 사용하는 경우 install을 통해서 vim을 설치하여야 한다)


결과: 

원래의 defaul page를 변경하였다.





후기:

솔직히 이번 시도는 너무 많은 error와 시간 투자가 필요했다. 왜 오류가 뜬지도 모르겠다 어떻게 고치는지도 잘 몰랐다. 오로지 지우고 새로 설치하고를 정말 많이 반복하였다. 그리고 처음에는 mac을 사용해서 vm을 통해서 Ubuntu를 다루려고 했지만, 너무 버벅거림이 심하고 firfox에서는 아예 작동이 되지 않고 꺼지는 경우가 많아서 window에서 VMware에서 똑같은 방법으로 시도하였다. 컴퓨터 문제인지는 잘 모르겠지만,  window에서도 run하는 VM이 훨씬더 빠르고 부드러웠다.


아래 참조 하였던 블로그에 설치 방법은 훨씬더 자세히 나와있다. 꼭 참고 하기를 바란다



그리고 처음에는 mac을 사용해서 vm을 통해서 Ubuntu를 다루려고 했지만, 너무 버벅거림이 심하고 firfox에서는


해결책: 처음에 VM을 설치 할 때  기본 메모리의 설정을 1024MB로 잡아놨기 때문이다. VM은 사용 컴퓨터 위에서 돌아가는 것이기에 메모리도 설정 값에 의해서 돌아가는 것 같다. 다시말해서 기본메모리를 값을 더 많이 잡으면 된다







참조:http://webnautes.tistory.com/1028







'OSS' 카테고리의 다른 글

[Ubuntu]hostname 변경  (0) 2018.05.07
[Ubuntu] Package tool&Network status  (0) 2018.05.07
[나름해석]JSMN-kyu.version2.0-jsondump.c  (0) 2018.04.09
[Command]git 기초2  (0) 2018.04.09
[Command]git의 기초1  (0) 2018.04.07

https://github.com/J-Kyu/jsmn

Original creator of jsmn: zserge

(※설명과 해석은 어디까지나 글쓴이의 주관적 사고로 부터 나왔습니다※)


<JSMN-jsondump.c>


1.jsondump.c

-앞에서 설명한 simple.c 는 JSON_STRING(이미 정해진)을 parsing하여 출력 값을 보여 주었다 (참고: http://kyu-tag.tistory.com/1)

하지만, jsnondump.c는 직접 stdin으로  부터 받아서 parsing을 통해서 출력하는 코드이다



#include <stdio.h>

#include <stdlib.h>

#include <unistd.h>

#include <string.h>

#include <errno.h>

#include "../jsmn.h"






/* Function realloc_it() is a wrapper function for standard realloc()

 * with one difference - it frees old memory pointer in case of realloc

 * failure. Thus, DO NOT use old data pointer in anyway after call to

 * realloc_it(). If your code has some kind of fallback algorithm if

 * memory can't be re-allocated - use standard realloc() instead.

 */

static inline void *realloc_it(void *ptrmem, size_t size) { //void 포인터에 size만큼의 ptrmem을 만든다.

    void *p = realloc(ptrmem, size);

    if (!p)  {                                                 //만약 p가 메모리 할당이 되지 않는 경우

        free (ptrmem);                                         //parameter로 받은 ptrmem의 메모리를 free하고

        fprintf(stderr, "realloc(): errno=%d\n", errno);       //error를 출력한다

    }

    return p;

}

//reallo_it() 함수는 원래 realloct함수의 wrapper function이다. 만약 reallocation이 실패하는 경우 오래된 메모리 포이턴를 free해준다


/*

 * An example of reading JSON from stdin and printing its content to stdout.

 * The output looks like YAML, but I'm not sure if it's really compatible.

 */


static int dump(const char *js, jsmntok_t *t, size_t count, int indent) {

    int i, j, k;

    if (count == 0) {

        return 0;

    }

    if (t->type == JSMN_PRIMITIVE) {

        printf("%.*s", t->end - t->start, js+t->start); //jsmn을 통해 parsing 받은 token의 type이 primitive이면, 해당 token을 출력한다

        return 1;

    } else if (t->type == JSMN_STRING) {

        printf("'%.*s'", t->end - t->start, js+t->start);//jsmn을 통해 parsing 받은 token의 type이 String이면, 해당 token을 출력한다

        return 1;

    } else if (t->type == JSMN_OBJECT) {                //jsmn을 통해 parsing 받은 token의 type이 object이면,

        printf("\n");                                   //다시한번 해당 object를 dump 함수에 넣어서 String과 primitive type을 구분한 뒤

        j = 0;                                          //":"를 기준으로 해당 object의 group을 출력한다

        for (i = 0; i < t->size; i++) {

            for (k = 0; k < indent; k++) printf("  ");

            j += dump(js, t+1+j, count-j, indent+1);

            printf(": ");

            j += dump(js, t+1+j, count-j, indent+1);

            printf("\n");

        }

        return j+1;

    } else if (t->type == JSMN_ARRAY) {                 //jsmn을 통해 parsing 받은 token의 type이 array이면, 해당 token을 다시한번 parsing한다

        j = 0;

        printf("\n");

        for (i = 0; i < t->size; i++) {

            for (k = 0; k <indent-1; k++) printf("  "); // 출력 형태를 다듬는다 " "

            printf("   - ");                            //해당 array의 value를 출력할때 앞에 "-"를 부친다

            j += dump(js, t+1+j, count-j, indent+1);    //parsing한 array를 출력한다

            printf("\n");

        }

        return j+1;

    }

    return 0;

}


int main() {

    int r;

    int eof_expected = 0;

    char *js = NULL;

    size_t jslen = 0;

    char buf[BUFSIZ];       //buf라는 char array에 BUFSIZ인 8192의 크기 만큼 들어가 있다

    

    jsmn_parser p;

    jsmntok_t *tok;

    size_t tokcount = 2;

    

    /* Prepare parser */

    jsmn_init(&p);

    

    /* Allocate some tokens as a start */

    tok = malloc(sizeof(*tok) * tokcount);

    if (tok == NULL) {

        fprintf(stderr, "malloc(): errno=%d\n", errno);

        return 3;

    }

    p

    for (;;) {                                         //무한루프로 돌리기 때문에 계속해서 string을 받아 r에 저장하여 parsing 한다

        /* Read another chunk */

        r = fread(buf, 1, sizeof(buf), stdin);      //stdin으로 부터 sizeof(buf)만큼의 element를 char형 buf array에 저장한다. return은 읽어준 element의 크기만큼 돌려준다

                                                    //sizeof(buf)만큼을 채울 수 없다면, EOF를 통해서 (ctrl+d)를 통해서 fread()를 빠져 나갈수 있다

        if (r < 0) {

            fprintf(stderr, "fread(): %d, errno=%d\n", r, errno);   //fread로 읽었을 때, 오류가 생기면 -1을 출력하여 error를 발한다

            return 1;

        }

        if (r == 0) {

            if (eof_expected != 0) {

                return 0;

            } else {

                fprintf(stderr, "fread(): unexpected EOF\n");   //fread로 읽어 올 때, 아무것도 읽어 오지 않으면 0을 반환하는데 parsing할께 없으니 당연히 error를 발하고 프로그램을 종료한다

                return 2;

            }

        }

        

        js = realloc_it(js, jslen + r + 1); //js에 r을 통해서 받은 buf의 array를 넣기 위해 추가로 js에 메모리를 할당해준다

        if (js == NULL) {

            return 3;

        }

        strncpy(js + jslen, buf,r);          //r을 통해서 stdin으로 부터 받아온 값을 js에 저장한다

        jslen = jslen + r;

        

    again:

        r = jsmn_parse(&p, js, jslen, tok, tokcount);   //저장된  r을 jsmn_parse를 통해서 parsing하고 출력한다

        if (r < 0) {

            if (r == JSMN_ERROR_NOMEM) {    //error를 검사한다

                tokcount = tokcount * 2;

                tok = realloc_it(tok, sizeof(*tok) * tokcount);

                if (tok == NULL) {

                    return 3;

                }

                goto again;다            }

        } else {

            dump(js, tok, p.toknext, 0);

            eof_expected = 1;

        }

    }

    

    return EXIT_SUCCESS;

}

2.  jsmn과 jsmndump.c

-jsmndump.c의 기본적인 흐름은 이렇다

1.jsmnsdump.c의 main 함수에서 fread를 통해서 string을 받아 r에 저장을 한다.

2. r에 대해서 요류를 검사한다.

3.문제가 없는 경우 jsmn 함수로 보내서 parsing을 하여 출력한다.....

4.다시 1번을 실행한다


-사용된 jsmn함수



3. 입력 form 및 출력

앞전에 설명한 simple.c에서는 ....

static const char *JSON_STRING ="{\"user\": \"johndoe\", \"admin\": false, \"uid\": 1000,\n  ""\"groups\": [\"users\", \"wheel\", \"audio\", \"video\"]}"; 

으로 {}안에 ":"을 기준으로 분리하고 array같은 경우 []으로 구분 지어 주었다

jsmndump.c 에서도 똑같이 { } 안에 parsing될 value를 넣고  ": "으로 구분지어주면 될 것이다

ex)

{name:J-kyu,Age:23,INFO:[Studnet,Computer-Science Major,etc.....]} //를 입력하고 ctrl+D를 누르면 아래와 같이 실행된다






Original coded by zserge

Modified and explained by Kyu

'OSS' 카테고리의 다른 글

[Ubuntu] Package tool&Network status  (0) 2018.05.07
[Ubuntu]Defaul page (Index.html) modify 1.01  (0) 2018.04.30
[Command]git 기초2  (0) 2018.04.09
[Command]git의 기초1  (0) 2018.04.07
[설명서]MacOS에서 Github사용법  (0) 2018.04.07

<Git 기초2>



$git add  *

-git add *는 모든 파일을 track하는 것이다. 그래서 파일을 commit 하기 위해서 따로 따로 track하지 않고 git add* 를 통해서 할 수 있다

$git reset HEAD <file>

-해당 file을 untrack하는 case이다

$git remote

-현재의 git 프로젝트가 어느 remote repository에 저장 되어 있는지 알려준다. 출력이  Origin인 경우 cloning을 하여서 remote repositiory 현재 위치기 때문이다

$git remote -v:  remote repository가 여러가지인 경우 등록된 전부를 보여준다

$git remote [단축이름]  [URL]: 해당 URL은 해당 단축이름에 저장되며  현재 작업중인 director에 추가하는 것이다

$git push 

-현재 commit된 모든 file을 remote repository에 push하여 update 시키는 것이다

$git push -u:는 parameter를 기억하여 다음에 push 할때 git이 무엇을 할지 알게 한다

$git pull

git의 remote repository에서 해당 git을 가져오는 것을 말한다



'OSS' 카테고리의 다른 글

[Ubuntu]Defaul page (Index.html) modify 1.01  (0) 2018.04.30
[나름해석]JSMN-kyu.version2.0-jsondump.c  (0) 2018.04.09
[Command]git의 기초1  (0) 2018.04.07
[설명서]MacOS에서 Github사용법  (0) 2018.04.07
[나름해석]JSMN-kyu.version1.2  (0) 2018.04.02

https://git-scm.com/book/ko/v2을 토대로 공부하고 설명하였습니다

(※설명과 해석은 어디까지나 글쓴이의 주관적 사고로 부터 나왔습니다※)



<Git의 기초 1>





기본개념

traked(관리대상): 파일이 이미 스냅샷에 포함돼 있던 파일

-Unmodified, modified,Staged 상태로 나누어 진다

-수정 없이 바로 commit 된 파일은 곳 바로 staged의 status로 변환된다.

-수정된 파일은 수정된 후, staged status로 변환된다

untraked(관리 대상이 아닌 경우): staging area에는 당연히 존재하지 않으며, 현재 dir에 스냅샷에 포함되지 않은 파일

-즉, 삭제된 파일이거나 add file을 해야하는 파일들이 untraked이다


-그림 참조 <https://git-scm.com/book/ko/v2/Git%EC%9D%98-%EA%B8%B0%EC%B4%88-%EC%88%98%EC%A0%95%ED%95%98%EA%B3%A0-%EC%A0%80%EC%9E%A5%EC%86%8C%EC%97%90-%EC%A0%80%EC%9E%A5%ED%95%98%EA%B8%B0>





[Command]


$ git init

-현재 dir을 git 저장소로 관리하고 싶을 때 사용한다


$ git status

-git repository의 현재 상태를 알려준다

-

$ git log

-해당 repository에 히스토리를 시간 순으로 보여준다

-해당 project의 commit&push할 때의 comments와 시간, 작성자에 대한 정보를 보여준다

option]     $ git log -p -n: 최근 n개의 commit 된 결과를 비교해주는 결과

 $ git log --stat: 파일의 변경 회수, 수정된 값, 즉, +와 -를 통해서 앞의 값들을 보여준다

 $ git log --pretty=format: "%.........." :옵션을 통해서 (%H,%h,%T.......) 출력된 값들이 보기 편한 형태로 출력된다



$ git  add name.txt

-현재 git repository에 존재하고 있는 name.txt파일을 staging과 동시에 commiting하기 위해서 track을 하는 것 이다

(현재 dir에 존재하는 name.txt파일 이어야 한다)

-위 예제는, nowic 파일을 git add를 통해서 trake된 것을 알 수 있다. 

(changes to be commited-->trake은 되었으니 commit 하면된다)


$git commit

-traked된 파일들을 staging하기 위해서 commit한다

-git status를 통해서 new file이 commit되어야 한다는 것을 알 수 있으며, $ git commit -m "created new text "를 통해서 message와 함께 commit한다. commit이 되었기 때문에 commitd을 다시하면 더이상 할 것이 없다라고 뜬다.


Sourcetree를 통해서 보는 history(status)이다

(pushed는 되기 전의 commit된 상태이다)


$ git rm

rm명령어를 통해서 삭제를 하게 된다면, 파일은 삭제되 었으나 unstaged이기 때문에 commitd을해야한다


(new.txt파일은 삭제되었으나 untracked이기 때문에 먼저 track을 하고 commit을 하여야 한다)

그래서 $git rm을 통해서 track을 하고 commit을 할 수 있게 한다

($ rm file을 통해서 삭제 하고나서 $ git rm file을 통해서 track을 하게 한다 )
(근데, 만약 file이 에초에 track된 파일이 아니라면 $git rm file을 할 필요는 당연히 없다)


--new.txt를 만든다 -->--trakced한다-->--commit한다-->--rm한다(이때, $rm을 통하는 경우 삭제에 대한 track을 하여야 하며, $ git rm을 통하는 경우 track이 같이 되게 때문에 따로 track할 필요는 없다 )-->commit한다--> ==>











'OSS' 카테고리의 다른 글

[Ubuntu]Defaul page (Index.html) modify 1.01  (0) 2018.04.30
[나름해석]JSMN-kyu.version2.0-jsondump.c  (0) 2018.04.09
[Command]git 기초2  (0) 2018.04.09
[설명서]MacOS에서 Github사용법  (0) 2018.04.07
[나름해석]JSMN-kyu.version1.2  (0) 2018.04.02

+ Recent posts