tcp/ip 기초, 저수준 입출력
IP : Internet Protocol(규약)
⇒ 인터넷 사용이 늘며 ip 부족상태가 발생(Ipv4)
⇒ 대안으로 Ipv6가 등장
⇒ 공유기(ip를 돌려쓰게 하는 것 - 유동(dynamic) ip
⇒ gateway(라우터)가 정지해도 근거리망(LAN)은 동작
⇒ gateway가 모여 WAN(Wide Area Network)
⇒ WAN이 모여 Inter network
⇒ protoco은 프로그램부터 하드웨어까지 문서화 되어 있다.
API (Application Program Interface) ; 응용프로그램 인터페이스
API는 운영체계나 다른 응용프로그램에게 처리요구를 할 수 있도록 컴퓨터 운영체계나 다른 응용프로그램에 의해 미리 정해진 특별한 메쏘드이다. API는 운영체계나 프로그램의 인터페이스로서 사용자와 직접적으로 대하게 되는 그래픽 사용자 인터페이스나 명령형 인터페이스와는 뚜렷한 차이가 있다.
API는 응용프로그램이 운영체계나 데이터베이스 관리시스템과 같은 시스템 프로그램과 통신할 때 사용되는 언어나 메시지 형식을 말한다. API는 프로그램 내에서 실행을 위해 특정 서브루틴에 연결을 제공하는 함수를 호출함으로써 구현된다. 그러므로 하나의 API는 함수 호출에 의해 요청되는 작업을 수행하기 위해 이미 존재하거나 또는 연결되어야 하는 몇 개의 프로그램 모듈이나 루틴을 가진다.
- redirection
⇒ ls -al > a.txt → a.txt에 출력한다.
ls -al >> a.txt → a.txt에 두 번 출력한다.(append)
⇒ tree(디렉토리를 탐색기 처럼 보여준다.)
→ tree > a.txt (역시 문서로 저장된다.)
※ linux와 cmd에 둘다 가능하다.
⇒ 에러 메시지는 저장되지 않는다.(표준에러)
→ 표준 출력만 가능
→ gcc > a.txt를 하면 파일에 내용이 없다.
→ gcc 2> a.txt를 하면 에러메시지가 txt에 출력된다.(1은 화면-저수준, 생략하면 1이다.)
※ grep -r 찾으려는 것 /usr/include
→ grep : linux에서 해당하는 문자열을 찾고 긁어준다.
→ -r : 하부 디렉토리까지 검색
⇒ printf("%d\n", 3);
→ 밑줄(“ ”내부)은 기본적으로 const char *p 이다.(문자열).
// p11_9.c
#include<stdio.h>
#include<string.h>
#include<fcntl.h>
#include<sys/types.h>
#include<sys/stat.h>
#define BUFFERSIZE 512
//#define file "d1009.in"
int main()
{
int infd;
int bytes;
int i;
int outfd;
char buffer[BUFFERSIZE];
//char는 문자열을 저장하려는게 아니라 정확하게 byte를 선언하려고 사용한다.
//const char *file = "d1009.in";
if((infd = open(file, O_RDONLY)) <0)
//if((infd = open("d1009.in", O_RDONLY)) <0)
{
perror("Can't open file d11-9.in");
}
if((outfd = open("d1009.out", O_CREAT|O_WRONLY, S_IWRITE))<0)
// 인자 3개면 세세한 지정이 가능하나 두 개로도 동작한다.
{
printf("Can\t open file d11-9.out");
}
while((bytes = read (infd, buffer, BUFFERSIZE))>0)
{
for(i=0;i<bytes; ++i)
{
putchar(buffer[i]);
}
write(outfd, buffer, bytes);
}
close(infd);
close(outfd);
return 0;
}
⇒ 출력 결과
- gcc 옵션
⇒ gcc -Dfile=\"d1009.in\" -o p11_9 p11_9.c
⇒ D : #define
⇒ \ \ : 해석금지
⇒ 고수준과 저수준은 할 수 있는 게 같다. 단지 효율과 속도의 차이
⇒ 고수준은 이름(stdin, stdout, stderr), 저수준은 번호(0, 1, 2)
※binary는 DOS에서만 해당하고 linux에서는 해당되지 않는다.
⇒ printf("show me\n");
fprintf(stdout, "show me\n");
fprintf(stderr, " show me\n");
→ 모두 같은 출력
#include<stdio.h>
int main()
{
char p[] = "정수는 %d의 크기를 따진다.\n.";
fprintf(stdout, p, sizeof(int));
printf(p, (int)4.1);
p[8] = 'c';
printf(p, 67);
return 0;
}
'내장형 하드웨어 > C언어' 카테고리의 다른 글
C언어 - 저수준 입출력, 리다이렉션 (0) | 2011.06.30 |
---|---|
저수준 입출력, HEXAVIEW (2) | 2011.06.28 |
C언어 - 고수준, 저수준 함수, write, read, open, close (0) | 2011.06.24 |
C언어 복습 5(token, strncpy, strtok, 디버깅) (0) | 2011.06.17 |
C언어 복습 (문자열 복사 함수) (0) | 2011.06.16 |