표준입출력함수 getchar() / putchar()

언어로그/C/C++ 2011. 2. 22. 11:36


 

입출력함수의 동작방식


프로그램이 실행되기 전(main함수로 진입되기 전) 운영체제는 그 프로그램을 위해  입출력 버퍼를 생성한다.

생성된 입출력 버퍼에 대한 접근을 위해 <stdio.h>에 표준입력 버퍼를 위해 stdin을, 표준출력 버퍼를 위해

stdout 등의 값을 정의해두었고, 프로그래머는 이 값에 접근함으로 표준입출력 버퍼를 다룰 수가 있다.  

 

int ch;
ch = getchar();
putchar(ch);

위 소스 코드가 실행되면,   먼저 1바이트의 메모리가 생성이 되고, ch라는 이름이 부여된다.

getchar() 함수가 실행이 되고, 표준입력버퍼가 비어있기 때문에, 커서가 깜박이게 된다. 

사용자가 abc값을 입력하면, 이 값은 입력버퍼에 쌓이게 된다.  엔터를 치면, 개행문자까지 버퍼에 입력이 되고,
이 버퍼에서 한문자가 읽혀져 getchar에 반환된다. 

 stdin : a b c \n   <= 개행문자가 입력되는 순간 getchar 함수가 문자 a를 반환함

 

getchar 함수에 의해 문자 'a' 의 정수값 97이 반환이 되고, puchar(ch)는 이값을 출력버퍼에 쓰고 동시에 버퍼를 비우게 되고,

비로소 모니터에 출력이 되게 된다.  
중요한 것은 입출력 버퍼에 데이터를 기록하고 읽어온다는 것과 개행문자까지 버퍼에 함께 기록되기 때문에 동작방식을

잘 이해해야 한다는 것이다. 

 

 

표준입력함수

int getchar();

표준입력버퍼에서 1문자를 읽어 정수값을 반환하는 함수.

 


표준 출력함수

int putchar(int ch);

표준출력버퍼에  1문자를 쓰고, 버퍼를 비우는 함수

 

 

기억해 두면 유용한 아스키값

  1. 'A'  :  65
  2. 'a'  :  97
  3. '0'  : 48
    '\n' : 10


이 글은 스프링노트에서 작성되었습니다.

'언어로그 > C/C++' 카테고리의 다른 글

포인터의 이해  (0) 2011.03.11
매크로, 연산자  (3) 2011.03.10
표준입출력함수 getchar() / putchar()  (0) 2011.02.22
비표준 입출력함수 getch(), getche()  (0) 2011.02.22
표준입출력함수 printf() / scanf()  (0) 2011.02.22
음수의 표현  (0) 2011.02.22

비표준 입출력함수 getch(), getche()

언어로그/C/C++ 2011. 2. 22. 11:32



getch(), getche()는 입출력버퍼를 거치지 않는 비표준 입출력함수로 <conio.h> 헤더파일에

선언되어 있다.  표준이 아니기 때문에 시스템마다 함수 지원여부가 다를 수 있지만 대다수 시스템에서

지원한다고 한다

  1. int getch(void)

표준입력(키보드)로부터 1문자를 읽어오는 함수로, 버퍼에서 읽지 않고 바로 읽어온다.

 

  1. int getche(void)

getche 는 getch 와 동일한 기능을 하지만, 읽은 1문자를 바로 echo해 준다.

 

escape(이스케이프 문자)

  1. '\a'  :beep sound    
  2. '\t'  : tab
  3. '\b'  : back space
  4. '\0'  : null character (아스키 코드값 0)
  5. ...

이 글은 스프링노트에서 작성되었습니다.

'언어로그 > C/C++' 카테고리의 다른 글

매크로, 연산자  (3) 2011.03.10
표준입출력함수 getchar() / putchar()  (0) 2011.02.22
비표준 입출력함수 getch(), getche()  (0) 2011.02.22
표준입출력함수 printf() / scanf()  (0) 2011.02.22
음수의 표현  (0) 2011.02.22
C 언어 학습에 핵심. 변수와 상수  (0) 2011.02.22

표준입출력함수 printf() / scanf()

언어로그/C/C++ 2011. 2. 22. 11:31



printf 와 scanf 는 포맷에 맞추어, 표준 입출력을 수행하는 함수, 이 함수들도 표준입출력 버퍼의

데이터를 다루는 함수들이다. printf 와 scanf 함수에 인자로 적절한 포맷을 지정하는 변환코드를 

지정해 줄 수 있다. 

 

변환코드

%c :  문자    

%d :  정수
%f  :  실수(단정도 - float)

%lf :  실수(배정도 -  double)

 

printf 함수에 변환코드를 좀더 세부적으로 표현해줄 수 있다.

printf  함수에 %nd (n은 양수) 은 최소 n 자리를 확보하라는 뜻이다.

int a = 12345;
a값을 다음과 같은 변환코드에 적용을 하면

 

  1. %8d    :   최소 8자리를 확보하여 출력한다.       >>   _ _ _ 1 2 3 4 5  가 출력됨.
  2. %3d    :   최소 3자리를 확보하지만, 더 큰자리수를 표현할수 잇다.    >> 12345
  3. %08d  :   최소 8자리를 확보하되, 빈칸은 0으로 표시한다. >>  0 0 0 1 2 3 4 5   
  4. %-8d  :    최소 8자리를 확보하되, 왼쪽칸 부터 채운다.    >>  1 2 3 4 5 _ _ _ 

 

 실수는 디폴트로 소수 6자리까지 표시를 한다.

double d = 123. 456

에 변환코드를 적용해보면,

  1. %f :디폴트로 소수 6번째 자리까지 표시한다. >>   1 2 3 . 4 5 6 0 0 0          
  2. %8.2f :       최소 8자리를 출력하되, 소수 2째 자리까지 표시  >> _ _  1 2 3 . 4 6           
    %08.2f :     최소 8자리 중, 소수 2째자리까지 표시하고 빈칸은 0으로 채움  >>     0 0 1 2 3 . 4 6   
  3. %.2f :  소수 2째자리까지 표시하고, 최소 자리수는 알아서 출력     >>    1 2 3 . 4 6   

  4. %o  : 8진수로 표현
    %0x : 16진수로 표현
  5. %%  : % 문자 자체 출력
  6. % s : 문자열 출력


정수를 8진수 16진수로 표현하기 

8진수 1자리수는 2진수 3비트에 해당하며, 16진수 1자리는 2진수 4비트에 해당한다.

 

int a = o73;

8진수 73을 2진수로 표현을 하면 0111 0011 로 표현할 수 있다.

 

int b = 0xf4;

16진수 64를 2진수로 표현하면 1111 0100 로 표현할 수 있다. 

scanf

Scanf : 표준 입력버퍼에서 지정한 서식에 맞게 읽어오는 함수로, 값을 저정할 메모리의 정확한 물리적인 주소를
              전달해야 한다. 통상 주소 연산자 &(엠퍼센트) 를 변수 앞에 두어 변수의 주소를 전달한다.

 

 

1234 (천이백삼십사) 라는 값을 입력받고 싶은 경우,  getchar() 함수는 한 문자를 반환하기 때문에
네 문자를 읽어서  적절한 정수형태로 변환을 해주어야 한다. 이러한 과정은 어렵진 않지만 번거로운 작업으로

 scanf 를 사용하여 편리하게 읽어올 수 있다. 

int a;
scanf("%d", &a);

 위 코드를 실행하여 1234를 입력했다고 가정하면,  sscanf

whitespace(공백, 탭, 엔터)를 만날 때까지 값을 읽어들이고, 변환코드에 지정한 형식으로 자동으로 변환하여
변수에 값을 담아준다. 

 

scanf 에서의 변화코드

scanf("%3d", &a);

scanf에서 변환코드는 printf 와는 다르게,  whitespace가 나올 때까지 읽되, 최대 3문자까지만 읽어들인다는 의미이다. 
즉 whitespace가 나오지 않더라도, 3문자까지 읽으면 더이상 버퍼에서 읽지 않는다는 것이다.

 

 scanf 에 변환코드를 여러개 주어 한번에 여러값을 읽어들일 수 있다. 

 

char ch;
int a;
float f;
double d;
 
scanf("%c %d %f  %d", &ch, &a, &f, &d);


scanf  사용시 주의사항

1) printf 에서는 float와 double형 데이터를 위해 %f 변환코드를 사용할 수 있었지만, scanf에서는
    반드시 float는 %f, double은 %lf 변환코드를 사용하여야 한다. 

2) %c 를 제외한 변환코드는 whitespace가 나올때까지 읽지만, %c는 whitespace 문자가 나올때까지 읽지만
    whitespace를 버퍼에 제거하지 않고 남겨두어 이후 오작동에 원인이 될수 있다. %c를 사용한 후 fflush(stdin)를

   사용하여 버퍼를 비워주는 것이 좋다.
3)  scanf("%d \n" , &a) 나 scanf("%d ", &a); 와 같이 변환코드 다음에 다른 문자가 있으면, 다른 변환코드가 있을거라

     가정하여 의도하지 않게 2번 입력해야 하는 경우가 발생하기 때문 포맷문자열에는 변환코드만을 사용한다. 


이 글은 스프링노트에서 작성되었습니다.

음수의 표현

언어로그/C/C++ 2011. 2. 22. 11:18


 

컴퓨터에서는 모든 데이터를 이진수로 다룬다.  그러다 보니 음수를 어떻게 이진수로
표현을 해야하는가에 대한 문제가 생기게 됐다.  가장 단순하게 음수를 표현하는 방법으로

부호화비트 표현법이 있다.  가장 상위비트를 부호비트로 표현하여 부호비트가 0이면 양수,

1이면 음수로 표현하는 방법이다.  하지만 두 수를 연산하는데 문제가 생기게 되는데...


(4비트로 이뤄진 수중에 첫번째 비트가 부호비트라고 가정해보자)

 + 5      =>     0101    

 -  5            =>             1101: 부호화 비트 표현   

  와 같이 +5는 0101,  -5는 부호비트만 바꾼 1010 으로 표현이 된다.

 하지만 두 값을 더한 값은 0이 되야 하지만 결과는 0010 (2)가 되어 잘못된 결과가 나오게 된다. 

 

그래서 다른 이진수 음수 표현법이 필요하게 됐고, 1의 보수표현법, 2의 보수표현법이 생겨나게 됐다.

1의 보수표현법은 음수를,  절대값의 이진수 표현에서 각 비트를 역전시킨 값을 음수로 나타낸다.  

+ 5  => 0101

 - 5               =>   1010      :   1의 보수 표현                         

두 값 0101과 1010을 더하면 결과는 1111 이 나온다.  음수를 1의 보수로 변경했기 때문에
다시 결과를 1의 보수로 취해주면 결과는 0000이 되어 올바른 결과가 나온다. 


그럼 2의 보수 표현법을 알아보자. 2의 보수 표현법은 1의 보수표현법에 1을 더한 값이다 

+ 5=> 0101

 - 5=>    1011:   2의 보수 표현               

 두 값 0101 과 1011 을 더하면 10000이 나오고, 4비트 표현이기 때문에 최상위 1비트를 버리면,

 결과가 0으로 올바른 값이 나온다.

 

2의 보수표현법은 1의 보수 표현법보다 속도가 더 빠르기 때문에 (총 n비트라면 1의 보수표현법은 2n번의 비트 역전을,

2의 보수표현법은 1n + 1 번의 비트 역전을 수행한다.) 컴퓨터에서 음수를 표현하기 위해 2의 보수표현법이 선택되었다.

'언어로그 > C/C++' 카테고리의 다른 글

비표준 입출력함수 getch(), getche()  (0) 2011.02.22
표준입출력함수 printf() / scanf()  (0) 2011.02.22
음수의 표현  (0) 2011.02.22
C 언어 학습에 핵심. 변수와 상수  (0) 2011.02.22
C 프로그램 실행과정  (0) 2011.02.22
C 언어란?  (0) 2011.02.22

C 언어 학습에 핵심. 변수와 상수

언어로그/C/C++ 2011. 2. 22. 11:18


 

C언어를 학습하는데 있어서 중요한 요소는 

  • 운영체제에게 어떻게 메모리를 확보해서 쓸 것인가?
  • 프로그램을 어떻게 효율적으로 작성할 것인가?
  • 어떻게 파일을 모듈화 할 것인가?

 

C언어는 빠른 실행속도를 장점으로 하는 언어이다. java 언어와 같은 객체지향 언어는 그 나름대로의
장점을 가지고 있지만,  낮은 성능과 제약된 자원을 갖는 시스템 혹은 빠른 속도를 필요로 하는 프로그램에

적합한 언어이다. 직접적으로 메모리에 접근할 수 있기 때문에 빠른 속도를 낼 수 있는 만큼, 메모리를 얼마나

잘 다루느냐가 C언어 프로그래밍의 중요한 화두이다.  효율적인 프로그래밍은 C언어 자체뿐 아니 컴퓨터에 대한

구조를 정확히 이해하고 있을 때 이루어질 수 있다.  효율적인 프로그램을 작성하는 것 만큼, 중요한 것이

어떻게 구조적으로 프로그램을 작성하는냐 이다. 요즘과 같은 규모가 대형화된 프로젝트에서는 프로그램에 대한

복잡도 감소와 관리를 용이하게 하는 것이 비용 절감에 중요한 요소이다. 

 

 

변수의 선언 , 상수?

변수란 프로그램에서 사용할 데이터를 담을 메모리 혹은 그릇을 의미하며, 변수를 선언한다는 것은 

이러한 메모리를 생성한다는 것을 의미한다.  변수 의미 자체는 '변하는 수' 로 이 메모리는 운영체제의 의해

할당되지만, 사용은 사용자가 하기 때문에 그 데이터가 변할 수 있다. 반면 상수는 운영체제가 메모리에 대한 

제어권을 가지고 있어서 사용자에 의해 변경될 수 없는 메모리 혹은 데이터를 의미한다.  

 

int a;

다음과 같은 문장은 정수형 데이터를 저장할 수 있는 4바이트의 메모리 공간을 할당하고, 그 메모리 공간을
a 라는 이름으로 접근하겠다고 운영체제에 말하는 것이다.

 

변수의 타입

변수의 타입에는 정수형, 실수형,  문자형 등... 다양한 타입들이 존재한다. 하지만 운영체제 입장에서 이것들은

수치값을 저장할 수 있는  크기가 다른 메모리 블럭에 해당할 뿐이다.  프로그래머들이 좀더 용이하게 프로그램을 작성할 수 있게

실세계에서 다루는 데이터의 유형을 나누고, 크기를 부여하고, 다르게 해석하도록 컴파일러에게 장치를 한 것이다. 

 

 

변환코드

char ch = 'A';
printf("%d %c", ch, ch);

위의 문장을 실행하면  65  'A' 라는 결과가 나온다. 

먼저 char 형은 문자를 저장하기 위한 1바이트 크기의 데이터 타입이다. 자주 사용하는 문자들의 표를 구성하고, 각 문자에 해당
하는 숫자(ASCII 코드)를 부여했다.   char 형은 사실 작은 범위를 수를 저장할 수 있는 정수형과 다름이 없다.

%d , %c는 변환코드라 부르며, 우측에 일치하는 쌍의 값이 어떻게 해석되야 하는지를 나타낸다. %d를 decimal, %c는 character를 

의미하며 이 변환코드에 의해 'A' 라는 값이 65라는 정수(아스키값)로 혹은 문자 'A'로 해석이 되었다. 


 

 





'언어로그 > C/C++' 카테고리의 다른 글

표준입출력함수 printf() / scanf()  (0) 2011.02.22
음수의 표현  (0) 2011.02.22
C 언어 학습에 핵심. 변수와 상수  (0) 2011.02.22
C 프로그램 실행과정  (0) 2011.02.22
C 언어란?  (0) 2011.02.22
비트필드  (0) 2010.12.10

C 프로그램 실행과정

언어로그/C/C++ 2011. 2. 22. 11:17



C프로그램 컴파일 - 실행

C언어로 작성된 프로그램은 .c 라는 확장자를 갖는다. 이를 소스파일이라 부르며 이 소스파일이

실행파일로 최종적으로 변환이 된다.  소스파일은 먼저 전처리기(preprocess)에 의해 읽혀지어, 컴파일 전에

특정한 작업이 수행된다. (소스 일부분이 삽입되거나 대체되는 것 같은...) 전처리기에 의해 읽혀진 컴파일러에 의해

머신에 맞는 기계어 (혹은 어셈블리어)로 변환이 되어 목적파일을 생성하게 된다. 이 목적파일은 링커에 의해

 해당 프로그램에서 참조하고 있는 파일들을 삽입하여 완전한 실행파일을 생성하게 된다. 
실행파일은  사용자가 실행을 하는 순간 운영체제에서 지원하는 Loader(적재기)에 의해 메모리가 올라가 실행되게 된다.

 

소스파일(.c)  > [Preprocessor, Translator] > 목적파일 (.o) > [Linker] > 실행파일(.exe) > [Loader]

 

이와 같이 C 프로그램이 생성되는 코딩, 디버깅, 컴파일, 배포 과정을 통일된 하나의 툴에서 제공해주는

프로그램이 IDE(통합개발환경)이다. 대표적인 IDE로 Visual Studio 가 있다.


Visual Studio6.0 단축키

컴파일 : Ctrl + F7

실    행:  Ctrl + F5

코드정렬 : Alt + F8

에러메시지 : F4

 

다음은 컨솔에 "Hello world!" 라는 문구를 출려가는 프로그램이다

#include <stdio.h>    // 표준 입출력 라이브러리를 사용하겠음
 
int main() // 프로그램 시작점 
{
    printf("Hello world!\n");  // 표준 출력에 문자열 출력 
    return 0;
}


#이 붙어 있는 명령을 전처리 지시자 라고 한다. 컴파일전에 전처리기에 의해 소스파일에 특정한 작업을

수행하는 명령이다. 위에서는 표준입출력 라이브러리를 사용하겠다고 알리고,  표준출력(컨솔)에 출력하는

printf 라는 함수를 사용하였다.  main은 C  프로그램에서 항상 시작점이 되는 함수로,  운영체제에 의해 처음으로

읽혀질 메모리 주소를 나타낸다.   

'언어로그 > C/C++' 카테고리의 다른 글

음수의 표현  (0) 2011.02.22
C 언어 학습에 핵심. 변수와 상수  (0) 2011.02.22
C 프로그램 실행과정  (0) 2011.02.22
C 언어란?  (0) 2011.02.22
비트필드  (0) 2010.12.10
함수의 이해 / 데이터 전달  (0) 2010.12.10

C 언어란?

언어로그/C/C++ 2011. 2. 22. 11:17



컴퓨터를 동작시키기 위해서는 컴퓨터가 이해할 수 있는 언어로 프로그램을 작성해야 한다.

컴퓨터가 이해할 수 있는  언어가 0과 1의 조합으로 이루어진 기계어이다.  하지만 기계어는  

컴퓨터가 잘 이해할 수 있을지는 몰라도, 결국 프로그램을 작성하는 사람이 이해하기에는 너무

어렸다는 단점을 가지고 있다. 특정 기계어 명령에 심볼로 대체하여 좀더 가독성이 좋은 형태로 만든것이 

어셈블리어이다. 하지만 이 이 어셈블리어는  Intel,  AMD 등 컴퓨터 CPU 머신마다 서로 달라, 각 머신맞게

프로그램을 재작성해야 하는 문제가 생기게 된다. 이러한 문제점을 극복하고자 탄생한 언어가  C 언어이다.
C 언어는 Bell 연구소에서 B언어를 기반으로 데니스 리치에 의해 생겨났다.  

C언어가 생겨남으로 소스수준에서의 독립성을 가지게 되었다.  C언어를 사용하여 프로그램을 작성하면,

다른 머신에서도 (컴파일러에 의해) 각 머신에 맞는 실행파일을 생성할 수 있게  되었다.

 

C언어가 널리쓰이게 되면서, 다양한 버전들이 생겨나게 됐다. 호환성 문제가 대두되어, C언어를 표준화하고자

하는 움직임이 생기게 되었다.  1989년  미국 규격협회(ANSI) 에서 표준화된를 승인하게 됐다.(ANSI C라고 함 : C89)

90년에는 국제 표준화 기구(ISO)에 의해 ANSI C가 표준으로 채택되었다. (ISO C 또는 표준C : C90)

이후 C++와 유니코드의 발전 등을 수용하기 위한 C99 등이 생겨나게 되었다.

(이 블로그에서는 표준C 를 기초로 함)



'언어로그 > C/C++' 카테고리의 다른 글

C 언어 학습에 핵심. 변수와 상수  (0) 2011.02.22
C 프로그램 실행과정  (0) 2011.02.22
C 언어란?  (0) 2011.02.22
비트필드  (0) 2010.12.10
함수의 이해 / 데이터 전달  (0) 2010.12.10
과제 #3 함수, 포인터의 사용  (0) 2010.12.10

[EE]Hitch1

학습로그/영어 2011. 2. 19. 16:27


ex) The man sweep girl named Julia off her feet
sweep off my feet
: make someone  fall in love very deeply


ex) I just need some space.
need some space
: need time alone, need time away from other people

ex) I'am really into my career right now.
to be (really) into
: concerntraiting in something, focused on something


ex) 60% of all communication is nonverbal.
nonverbal
: not verbal, without speeking

ex) 30% of communication is your tone.
tone 
: intonation, pitch


ex) 90% ofwhat you're saying ain't coming out of your mouth
ain't
: am not, are not, is not

ex) she doesn't wanna hurt your feeling.
  wanna
: want to


ex) that's where I come in.
: that's why I start, that's why my job begin


ex) No matter  what, no matter when, no matter who...
: any situation, any time, any person



'학습로그 > 영어' 카테고리의 다른 글

[마인드맵] My House  (0) 2012.03.14
[마인드맵] Wedding  (0) 2012.03.06
영어를 빨리 배우는 방법  (0) 2011.04.12
ESL(cafe #274)  (0) 2011.03.02
[EE]Hitch1  (0) 2011.02.19
학습방법  (0) 2011.02.14

cURL

운영체제로그/Linux 2011. 2. 18. 19:15

 

curl은 URL 문법을 사용해서 네트웍으로 데이터를 전송할 수 있는  커맨드 라인 툴로,  DICT, FILE, FTP, FTPS, GOPHER, HTTP, HTTPS,

IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP,SMTP, STMPS, TELNET 등 다양한 프로토콜을 지원한다. 

 

curl 명령에 -v 옵션을 사용하여,  curl 명령이 서버에 보내는 명령들을 볼 수 있다. 

 

웹페이지를 요청하는 다음과 같은 요청을 할 수 있다. 

curl http://curl.haxx.se

위와 같이 요청을 하면, 웹페이지 소스를 확인할 수 있다. 

 

-i 옵션을 사용하여, 헤더를 볼수 있으며, -I 옵션을 사용하여 헤더만 볼수도 있다.  

curl -I http://curl.haxx.se

 


GET 방식의 요청

curl "www.hotmail.com/when/junk.cgi?birthday=1906&press=OK"


POST 방식의 요청

curl -d "birthday=1905&press=OK" www.hotmail.com/when/junk.cgi

 

특수문자를 포함하기 위해서  curl에 --data-urlencode 옵션을 사용하여 인코딩할 수 있다. 

curl -data-urlencode "name=I am dDaniel" www.example.com

 

 

File Upload 하기 

 

위와 같이 html 문서내 파일업로드를 다음과 같은 curl 명령으로 수행할 수 있다. 

curl -F upload=@로컬파일이름 -F press=OK www.example.com

 

PUT 방식 

HTTP 서버에 데이터를 업로드하는 가장 좋은 방법은 PUT  을 사용하는 것이다. 물론 서버단에 HTTP PUT 스트림을

받는 방법을 아는 프로그램이나 스크립트가 존재해야한다. 파일을 HTTP 서버로 전송하는 명령이다 .

curl -T 파일 www.upload.com/receive.cgi

 

 

HTTP 인증 

HTTP  인증은 서버에 사용자명과 비밀번호를 전송하여 컨텐츠 접근권한을 허용받는 것이다. HTTP  는 디폴트로 순수 텍스트

기반 인증을 수행하기 때문에 비밀번호가 언제든지 네트워상에서 노출될 위험이 있다. 

curl -u name:password www.secret.com

사이트 마다 다른 인증방식을 요구할 수 있기때문에 서버로부터의 헤더를 확인하여, ---ntlm, --digest, --negotiate, -- anyauth 등

적합한 옵션을 주어야 할 수있다. 

 

User Agent 설정 

웹 요청시 User-Agent 헤더를 설정하여 원하는 버전의 웹페이지를 얻어 올 수 있다. 

 

Window에서 Internet  Explorer를 사용하고 있다면, 

curl -A "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)" www.example.com

 

리눅스에서 Netscape를 사용하고 있다면, 

curl -A "Mozilla/4.0 [en] (X11; U; Linux 2.2.15 i686)"  www.example.com



curl을 사용하여 트위터에 tweet 하기

트위터 API를 사용에서 글을 트윗 하기 위해서, 인증을 거쳐야하는데 curl을 사용하여 인증처리 및 글을 등록해보자!

--basic --user 사용자명:비밀번호

옵션을 사용하여 Basic Auth 을 처리할 수 있다. 그을 트윗하는 완전한 예는 다음과 같다. 

 

curl --basic --user 사용자명:비밀번호 --data status="my test tweet!!" http:// twitter.com/statuses/update.xml

 

 

세션쿠키값을 파일에 저장하여 로그인상태 유지하기

트위터의 특정 사람에게 DM을 보내기 위해 로그인 처리를 다음과 같이 할 수 있다. 

curl --cookie /tmp/cookies.txt --cookie-jar /tmp/cookies.txt --user-agent Mozilla/4.0 --data 
'username=사용자명' --data 'password=비밀번호' --data 'commit=Sign In' http://twitter.com/login

 

--cookie /tmp/cookies.txt --cookie-jar /tmp/cookies.txt

위 옵션은 /tmp/cookies.txt 파일에서 쿠키를 읽어오고 저장하게 한다.  최초에 빈파일이지만, 로그인 완료되면 세션쿠키가 해당 파일에

저장되게 된다. 이후 요청에서는 이 쿠키를 읽어서 별도의 인증과정 없이  아래와 같이 DM을 전송 할 수 있다. 

 

curl --cookie /tmp/cookies.txt --cookie-jar /tmp/cookies.txt --user-agent Mozilla/4.0 --data
"text=보낼 메시지를 이곳에" --data 'commit=Send' http://twitter.com/direct_messages/create/대상사용자아이디(숫자)


이 글은 스프링노트에서 작성되었습니다.

Base64 Encoding

기타 2011. 2. 18. 12:06



1. Base64 Encoding 이란?

Base64는 바이너리 데이터를  64진수 표현으로 변환하여 아스키 문자열로 인코딩하는 방법이다.
Bae64 encoding은 텍스트 데이터를 전송하기 위해 설계된 매체상에서 바이너리 데이터를 전송하거나 
저장하기 위해 사용되는 방식이다. 전송중에 데이터가 변경되지 않고, 파괴되지 않았음을 보장해준다. 
MIME를 사용하는 이메일을 포함한 많은 애플리케이션에서 사용된다.



2. Base64 Encoding 절차
3바이트 단위로 인코딩을 수행하며, 3으로 나누어 떨어지지 않는 데이터는 =문자로 패딩바이트를 삽입한다. 
(즉 3으로 나누어 떨어지지 않으면, =문자 1개, 또는 2개가 패딩된다.)
3바이트 데이터는 가장 상위비트부터 64진수로 표현하기 위해 6 비트씩 구분하여, 4개의 아스키 문자로 변환한다.
이 때 사용하는 64개의 문자는  A~Z (26개) , a~z(26개), 0~9(10개), +. / (2개) 이다.  0은   A로 인코딩되며,
63은 /로 인코딩이 된다. Base64Encoding 된 데이터는 원래 데이터보다 약 37% 증가한다. 


다음은 name 이라는 데이터가 Base64 Encoding 된후, 결과를 나타낸다.  

먼저 nam 이 가장 상위비트부터 6개의 비트씩 추출이 되어진다. e는 6개의 비트가 추출되어 인코딩이 되면
2개의 비트가 남게되는데, 여기에 4개의 0비트를 패딩하여 인코딩이 된다. 3바이트의 데이터는 인코딩된 
4개의 문자로 출력되는데,  위에서는 ZQ에 2개의 = 문자가 패딩이 된다. 
 
Base64 인코딩된 결과를 디코딩 할 때는 반대의 과정을 거치면 된다. 
인코딩 결과에서,  4개의 문자로부터 6개의 비트씩 추출하여 3바이트로 조합을 하여 한 바이트를 온전한 데이터로
읽으면 된다. 나누어 떨어지지 않는 문자는 =문자가 2개이면, 1개의 바이트(8비트)만을 추출하고 =문자가 1개이면,  
2개의 바이트(8비트씩 2개)를 추출하여 읽어내면 디코딩을 수행할 수 가 있다.  


 

'기타' 카테고리의 다른 글

지갑  (0) 2011.05.26
2011년 자바 개발자 컨퍼런스 등록!!  (1) 2011.05.23
Base64 Encoding  (0) 2011.02.18
muju  (33) 2011.02.14
정규표현식(Regular Expression)  (0) 2010.12.10
MD5(Message-Digest algorithm 5)  (0) 2010.12.10