리눅스에서 mysql 리스타트 명령은 다음과 같다.

service mysqld restart

d 가 포인트...;
Posted by 행복한 프로그래머 궁금쟁이박

댓글을 달아 주세요

  CGI설치시 필요한 UNIX 압축/해제 명령어


    유닉스의 모든명령어는 반드시 소문자로 입력해야 합니다.

-
압축풀기
구문
: tar -xvzf source.tar.gz
   
옵션
-x
: 파일을 추출하는 옵션이다.
-v
: 옵션은 어떤파일들이 아카이브되고있는지를 보여준다.
-z
: 옵션은 "gzip'' 을 이용하여 압축푼다.
 
-f
: 옵션은 그 다음의 인자가 생성할 저장 파일

     

    명령어

    사 용 법

    tar

    .tar, _tar로 된 파일을 묶거나 풀때 사용하는 명령어
    (압축파일이 아님)

    % tar cvf [파일명(.tar, _tar)] 압축할 파일(또는 디렉토리): 묶을때
    % tar xvf [파일명(.tar, _tar)]  :  풀 때
       (cf) cvfp/xvfp 로 하면 퍼미션 부동

    .파일묶기와 압축을 동시에
     
    % tar cvzfp 파일명.tar.gz 압축할파일

    compress

    확장자 .Z 형태의 압축파일 생성

    % compress    [파일명]     : 압축시
    % uncompress [파일명]    : 해제시

    gzip

    확장자 .gz, .z 형태의 압축파일 생성

    %  gzip     [파일명]    : 압축시
    %  gzip -d [파일명]   : 해제시

    기타

    .tar.Z
    이것은 tar로 묶은 후에 compress를 사용하여 압축한 것으로 uncompress를 사용해서 압축을 푼 다음, 다시 tar를 사용해서 원래의 파일들을 만들어내면 됩니다.
    아니면 다음과 같이 한 번에 풀 수도 있다.
    % zcat  [파일명].tar.Z  : 해제시

    .tar.gz또는 .tar.z
    % gzip -cd [파일명]    : 해제시

    .tar.gz 또는 .tar.z
    gzip을 사용해서 푼 다음 다시 tar를 사용해서 원래 파일을 만들어 낼 수 있으나, 하지만 다음과 같이 하면 한 번에 처리를 할 수 있다.
    % gzip -cd 파일.tar.gz | tar xvf -

 

Posted by 행복한 프로그래머 궁금쟁이박

댓글을 달아 주세요

출처 비룡승천(飛龍昇天) | 비룡
원문 http://blog.naver.com/doctorlsj/80017129290

1. 편집(Editing)

ed                      오래된 유닉스 표준 라인 텍스트 편집기
emacs                   Emacs 편집기
ex                      유닉스 표준 라인 텍스트 편집기
fmt                     텍스트를 한 줄에 72문자로 맞추기
gmacs                   Emacs 편집기
vi                      유닉스 표준 화면 편집기
view                    vi와 같음, 읽기 전용모드로


2. 명령어 입력하기(Entering a Command)

!                       지정한 명령 반복
!!                      이전 명령 반복
^^                      치환을 이용한 이전 명령 반복
alias                   지정한 명령어 목록에 이름 지정
history                 히스토리 사건 디스플레이
unalias                 alias로 지정한 이름 삭제

3. 디렉토리(Directories)

cd                      현재 작업 디렉토리 변경
chmod                   파일이나 디렉토리 허가 권한 변경
ln                      두 디렉토리 엔트리들간 링크 만들기
ls                      파일 정보 디스플레이
mkdir                   디렉토리 만들기
pwd                     현재 작업디렉토리 경로면 디스플레이
rm                      파일이나 디렉토리 삭제
rmdir                   비어있는 디렉토리 삭제
umask                   파일 생성을 위한 사용자 마스크 지정

4. 데이터 디스플레이(Displaying Data)

head                    파일의 첫부분 디스플레이
less                    데이터를 한 번에 한 화면씩 디스플레이
more                    데이터를 한 번에 한 화면씩 디스플레이
pg                      데이터를 한 번에 한 화면씩 디스플레이
tail                    파일의 마지막 부분 디스플레이

5. 오락(Diversions)

banner                  인쇄하기에 알맞는 큰글자 출력
bcd                     텍스트를 BCD 카드 천공 형식으로 바꾸기
ching                   질문에 대한 충고 디스플레이
fortune                 흥미 있는 메시지 디스플레이
number                  숫자를 영어 단어로 바꾸기
ppt                     텍스트를 종이 테이프 형식으로 바꾸기
rain                    빗방울 떨어지는 모양을 화면에 티스플레이
worms                   터미널에 벌레 디스플레이

6. 파일 다운로드(Downloading Files)

archive                 archive/어노니머스 ftp 탐색을 이용하기 위한 클라이언트
프로그램
compress                압축된 .z 파일 생성하기
ftp                     다른 컴퓨터로부터의 파일전송
tar                     파일의 집합(archive)을 생성, 해제
uncompress              compress에 의해 생성된 .z 파일 해제
zcat                    compress에 의해 생성된 .z 파일 액세스

7. 파일(Files)

chmod                   파일이나 디렉토리 허가 권한 변경
cp                      파일 복사
ln                      두디렉토리 엔트리간의 링크 만들기
ls                      파일 정보 디스플레이
mv                      파일 이동이나 재명명
rm                      파일이나 디렉토리 삭제
touch                   파일 액세스와 수정 시간 갱신
umask                   파일 생성에 대한 사용자 마스크 지정

8. 필터(Filters)

fmt                     텍스트를 한 줄에 72문자로 맞추기
head                    파일의 첫 번째 부분 디스플레이
less                    데이터를 한 번에 한 화면씩 디스플레이
cat                     표준 입력을 표준 출력으로 결합, 복사
colrm                   데이터의 각 줄에서 지정한 열들을 삭제
crypt                   키를 이용하여 텍스트를 암, 복호화
cut                     각 줄의 선택한 부분 잘라내기
egrep                   grep과 같이 전체 정규 표현식 탐색
fgrep                   grep과 같이 고정 문자열 탐색
grep                    지정한 패턴이 있는 줄 찾아내기
look                    지정한 패턴으로 시작하는 줄 찾아내기
nl                      줄 번호에 텍스트 추가
more                    데이터를 한 번에 한 화면씩 디스플레이
paste                   데이터의 열들 결합
pg                      데이터를 한 번에 한 화면씩 디스플레이
pr                      인쇄하기에 적합하도록 텍스트 형식 맞추기
rev                     데이터의 각줄에 있는 문자의 순서 바꾸기
sort                    데이터의 정렬과 병합
spell                   철자가 잘못된 단어에 대한 텍스트 점검
tail                    파일의 마지막 부분 디스플레이
tee                     표준 입력을 파일과 표준 출력으로 복사
tr                      선택한 문자 변환이나 삭제
uniq                    텍스트 파일에 있는 연속적으로 반복된 줄 삭제
wc                      줄, 단어, 문자의 수 계산

9. 게임(Games)

adventure               고유의 텍스트 기반 어드벤쳐 게임
backgamon               주사위/판 게임
battlestar              어드벤쳐 게임
bj                      블랙잭 카드 게임
boggle                  보글 단어 게임
btlgammon               주사위/판 게임
canfield                혼자서 하는 카드 게임
chess                   체스 게임
craps                   크랩 주사위 게임
cribbage                카드 게임
fish                    Go fish 게임
hack                    공상 게임
hangman                 단어 게임
hunt                    다중 사용자 사냥 게임
mille                   Mille Bournes 보드 게임
monop                   모노폴리 보드 게임
moo                     예측 게임
quiz                    질문과 대답 게임
robots                  로보트 게임
rogue                   공상 게임
sail                    다중 사용자 항해 게임
snake                   사냥 게임
trek                    스타 트랙 게임
worm                    벌레 기르기 게임
wump                    게임

10. 정보(Information)

du                      디스크 장치 사용 통계 디스플레이
msgs                    터미널에서의 메시지 수신의 허용이나 부인
news                    시스템 뉴스 디스플레이
quota                   사용자 시스템 자원 할당량 디스플레이
ruptime                 시스템 사용 시간 디스플레이
uptime                  시스템 사용 시간 디스플레이

11. 인터네트(Internet)

archive                 archive/어노니머스 ftp 탐색을 위한 클라이언트 프로그램
ftp                     다른 컴퓨터로부터의 파일 전송
gopher                  gopher 정보 서비스를 이용하기 위한 클라이언트 프로그램
host                    인터네트 컴퓨터의 도메인 /IP주소 디스플레이
netfind                 netfind 서비스를 액세스하기 위한 클라이언트 프로그램
ping                    인터네트 컴퓨터가 응답이 있는지의 여부를 점검
swais                   wais 서비스를 액세스 하기 위한 클라이언트 프로그램
telnet                  다른 컴퓨터로의 접속
traceroute              다른 컴퓨터로의 인터네트 경로 디스플레이
whois whois             서버를 액세스하기 위한 클라이언트 프로그램
xswais wais             서비스를 액세스하기 위한 X 윈도우 클라이언트 프로그램

12. 로그인과 아웃(Logging In and Out)

login                   로그인 셸을 종료하고 새로운 로그인을 초기화
logout                  로그인 셸 종료
passwd                  로그인 패스워드 변경

13. 온라인 매뉴얼(Online Manual)

apropos                 주제어 탐색을 기본으로 한 명령어 이름 디스플레이
man                     유닉스 온라인 메뉴얼로부터 엔트리 디스플레이
whatis                  지정한 명령어의 한 줄로 된 요약 디스플레이

14. 우편(Mail)

biff                    우편이 도착하면 통지
fmt                     텍스트를 한 줄에 72문자로 맞추기
from                    우편이 와 있으면 보여주기
mail                    우편 보내고 읽기
Mail                    mail의 버클리 유닉스 버전
mailx                   mail의 시스템 V 버전

15. 숫자(Numbers)

bc                      쉽게 사용할 수 있는 계산기
factor                  숫자를 공약수로 나누기
primes                  지정한 값보다 큰 소수 만들기
xcalc                   X 윈도우 계산기

16. 인쇄(Printing)

cancel                  lprm의 시스템 V 버전
lp                      lpr의 시스템 V 버전
lpq                     인쇄를 기다리는 잡(jop) 보여주기
lpr                     인쇄하고자 하는 파일 보내기
lprm                    프린트 큐에 있는 잡(jop) 삭제
lpstat                  lpq의 시스템 V 버전
nl                      텍스트에 줄 번호 추가
pr                      출력에 맞게 텍스트 형식 맞추기

17. 셸(Shells)

absh                    Bash 셸
chsh                    기본 지정 셸 변경
csh                     C-셸
exit                    셸 빠져나오기
ksh                     Korn 셸
sh                      Bourne 셸
tcsh                    Tcsh 셸
zsh                     Z-셸

18. 터미널(Terminal)

lock                    터미널을 일시적으로 잠그기
mesg                    터미널에서 메시지 수신의 허용이나 부인
stty                    터미널의 운영 옵션 지정/디스플레이
tset                    터미널 초기화
tty                     터미널을 나타내는 특수 파일 보여주기

19. 시간과 날짜(Tims and Dates)

cal                     달력 디스플레이
date                    시간과 날짜 디스플레이
leave                   지정한 시간에 대해 남은 시간 디스플레이
xclock                  X 윈도우 시계

20. 유즈네트(Usenet)

newsetup                새로운 .newsrc 셋업
nn nn                   뉴스리더를 이용한 유즈네트 기사 읽기
nncheck                 읽지 않은 유즈네트 기사 점검
nngoback                지정한 유즈네트 기사 읽지 않은 것으로 마크
nngrab                  지정한 제목의 모든 유즈네트 기사 찾기
nngrep                  지정한 유즈네트 뉴스그룹 이름 디스플레이
nnpost                  유즈네트 기사 게시
nntidy                  유즈네트 뉴스리더 .newsrc 파일 지우고 맞추기
nnusage                 nn을 이용한 사람에 대한 통계 보여주기
pnews                   유즈네트 기사 게시
rn                      rn을 이용한 유즈네트 기사 읽기

21. 사용자(Users)

chfn                    finger 정보 변경하기
finger                  지정한 사용자 아이디 정보 디스플레이
id                      사용자 아이디와 그룹 아이디 디스플레이
rwho                    네트워크에 있는 사용자 아이디 디스플레이
talk                    다른 사용자와 메시지 보내고 받기
users                   현재 로그인된 사용자 아이디 정보 디스플레이
w                       사용자 아이디와 액티브 프로세스 정보 디스플레이
who                     현재 로그인된 사용자 아이디 정보 디스플레이
whoami                  현재 로그인된 사용자 아이디 디스플레이
write                   다른 사용자와 메시지 주고 받기

22. 변수(Variables)

echo                    표준 출력으로 인수 출력
printenv                환경 변수 값 디스플레이
set                     셸 변수 값 지정이나 디스플레이
setenv                  환경 변수 값 지정이나 디스플레이
unset                   셸 변수 삭제

23. X 윈도우(Window)

mwm                     Motif 윈도우 관리자
olwm                    Open Lock 윈도우 관리자
twm                     Tab 윈도우 관리자
xbiff                   biff의 X 윈도우 계산기
xcalc                   X 윈도우 계산기
xclock                  X 윈도우 시계
xhost                   원격 컴퓨터 사용을 X 서버에게 말하기
xinit                   X 윈도우 시작
xswais                  wais 서비스를 액세스 하기 위한 X 윈도우 클라이언트 프로
그램
xterm                   X 윈도우 터미널 세션 시작


Posted by 행복한 프로그래머 궁금쟁이박

댓글을 달아 주세요

 [root@earth server]# cat adduser.sh

#!/bin/bash
#Usage : ./adduser id password group comment

if [ $# = 0 ]
        then
                echo "Usage: ./adduser.sh id pass group comment"
                exit 1
fi
if useradd  $1 -g$3 -c$4
        then
                echo $2 | /usr/bin/passwd --stdin $1 # 패스워드를 수정하는 부분
                edquota -p test $1 # 기준 사용자를 입력한다.
                exit 0
        else
                echo "User $1 already exist!!"
                exit 1
fi



출처 : http://san9972.tistory.com
Posted by 행복한 프로그래머 궁금쟁이박

댓글을 달아 주세요

  1. BlogIcon nalivai 2013.08.03 08:58  댓글주소  수정/삭제  댓글쓰기

    This option is satisfactory when visually comparing samples superb to well a uniform specified reference

  2. BlogIcon NaturalMysticYuml 2013.11.30 00:41  댓글주소  수정/삭제  댓글쓰기


    19 июня Госдума РФ должна была рассматривать в первом чтении законопроект №42197-6 "О внесении изменений в отдельные законодательные акты Российской Федерации по вопросам осуществления социального патроната и деятельности органов опеки и попечительства". Принятие этого закона будет означать, что родители фактически потеряют право на собственных детей, их судьбу будут решать чиновники из органов опеки. Они смогут прийти в любую, вполне благополучную среднюю семью, отобрать у вас ребенка и, например, продать его за границу. Известен случай, когда ребенка, родителей которого лишили родительских прав, органы опеки не разрешили усыновить ни бабушке, ни ближайшим родственникам, ни обычной семейной паре, а продали за рубеж... гомосексуальной паре. Это один из самых чудовищных, но совершенно не единичный случай. При этом чиновники не несут никакой ответственности за свои поступки — фактически узаконивается их абсолютный беспредел. Зверства ювенальных органов уже сполна ощутили на себе жители многих западных стран. Теперь эти чудовищные законы хотят ввести и в России.

    Покушение на институт семьи — это уже очень похоже на геноцид. Партия Воля активно призывала всех, кому не безразлично будущее страны, будущее российских семей приянть участие в акции. Нужно было позвонить всем тем, от кого зависит принятие решения.

    Председатель Госдумы Нарышкин Сергей Евгеньевич

    Председатель комитета Госдумы по вопросам семьи, женщин и детей Мизулина Елена Борисовна

    Зам. председателя комитета Госдумы по вопросам семьи, женщин и детей Карпович Наталья Николаевна

    Уполномоченный по правам ребенка в России Астахов Павел Алексеевич

    Российская общественность живо откликнулась на призыв партии «ВОЛЯ» протестовать против принятия законопроекта о социальном патронате, который фактически узаконивал бы отъем детей из семей по совершенно надуманным основаниям. Весь вчерашний день в Госдуму и уполномоченному по правам ребенка звонили и писали граждане со всей страны. И вчера же, согласно данным официального сайта Госдумы, рассмотрение скандального законопроекта было перенесено. На какой срок — не уточняется.

    Это наша маленькая, но пока не окончательная победа. Нужно продолжать следить за планами Госдумы по ювенальным законопроектам, чтобы они не были приняты «тихой сапой», втайне от общественности. Поэтому сегодня с утра несколько сторонниц партии «Воля» вышли к зданию Госдумы с одиночными пикетами.



    Акции партии «ВОЛЯ» по противодействию внедрению в России ювенальной юстиции будут продолжаться. Следите за ними и принимайте в них участие!

    Все подробности на сайте партии.
    [url=http://onesticket.ru/][color=#E4F4FE] [/color][/url]

출처 : http://cafe.naver.com/kpserv.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=39

1단계 - 저수준 입출력 루틴
1. 유닉스, 리눅스에서의 파일과 디렉토리
유닉스, 리눅스에서의 모든것들은 파일입니다. 일반 텍스트 파일, 장치, 포트, 디렉토리 등등
모든 것이 파일입니다. 모든것이 파일이라 이상할지 모르겟지만 파일은 운영체제, 장치에 대해
일관된 인터페이스를 제공하므로써 프로그래밍 작업을 편리하게 하는(?) 장점이 있습니다.

디렉토리라고 하는것은 각 파일에 대한 링크를 가지고 있는 파일 입니다.

2. 저수준 파일 액세스
2-1. write 시스템 콜
#include <unistd.h>
size_t write(int fildes, const void *buf, size_t nbytes);
write 시스템 호출은 fildes 와 관련된 파일에 buf를 nbytes만큼 씁니다. 쓰기가 성공하면
쓰여진 바이트 수를 반환하고 실패하면 -1 를 반환하고 errno 변수를 설정합니다.
다음은 write 시스템 호출을 이용해 문자열을 출력하는 예제입니다.

<write.c>
#include <unistd.h>
#include <stdlib.h>

int main()
{
 if((write(1, "Hello, World!\n", 15)) == 15)
  write(1, "success\n", 9);
 exit(0);
}

$ gcc -o write write.c
$ ./write
Hello, World!
success

실행해 본 결과 Hello, World! 와 success 가 출력되었습니다. 첫번째 출력은 첫번째 write
시스템 호출이 1번 스트림에 문자열을 쓰기때문에 출력되었고, 두번째 출력은 첫번째 출력이
성공 되어서 if 문으로 인해 write 문으로 1번 스트림에 문자열이 쓰여서 출력된 겁니다.

2-2. read 시스템 콜
#include <unistd.h>
size_t read(int fildes, void *buf, size_t nbytes);

read 시스템 호출은 fildes와 관련된 파일에서 nbytes 만큼 읽어 들여서 buf에 저장합니다.
성공하면 읽힌 바이트 수를 반환하고 실패하면 -1 를 반환합니다.
read.c 는 read 시스템 호출을 사용하여 사용자 입력을 받아 들여 출력합니다.

<read.c>
#include <unistd.h>
#include <stdlib.h>

int main()
{
 char buffer[128];
 int nread;

 nread = read(0, buffer, sizeof(128));
 if(nread != -1)
  printf("result: %s\n", buffer);
 exit(0);
}

$ gcc -o read read.c
$ ./read
Input
result: Input

실행하면 read 프로그램은 read 시스템콜로 0번 스트림에서 읽어 드린 문자열을 출력합니다.

2-3. open 시스템 호출
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>

int open(const char *path, int oflags);
int open(const char *path, int oflags, mode_t mode);

open 시스템 호출은 path에 지정된 파일을 oflags모드로 열어서 그 기술자를 반환합니다.
선택적인 인자로 mode 인자를 줄수 있는데 이 모드는 파일을 생성할때의 퍼미션을 지정하는 겁니다.

oflags 모드의 종류로는

O_RDONLY - 읽기 전용
O_WRONLY - 쓰기 전용
O_RDWR - 읽기/쓰기 전용

또, 조합될수 잇는 모드로는

O_APPEND - 파일의 끝에서 부터 쓴다.
O_TRUNC - 기존의 내용을 제거하고, 파일의 길이를 0으로 설정한다.
O_CREAT - 파일이 없다면 mode 인자에 주어진 상태로 파일을 생성한다.
O_EXCL - 파일을 생성할때 파일이 이미 존재 한다면 에러를 반환하고 open 을 실패하게 한다.

등이 있습니다.

또한 O_CREAT 플래그를 사용하여 파일을 생성할때의 퍼미션을 지정하는 mode 인자에 조합될수
있는 인자들은

S_IRUSR - 소유자 읽기 허용
S_IWUSR - 소유자 쓰기 허용
S_IXUSR - 소유자 실행 허용
S_IRGRP - 그룹 읽기 허용
S_IWGRP - 그룹 쓰기 허용
S_IXGRP - 그룹 실행 허용
S_IROTH - 기타 읽기 허용
S_IWOTH - 기타 쓰기 허용
S_IXOTH - 기타 실행 허용

이 있습니다.

만약에

filedes = open("file", O_WRONLY | O_CREAT, S_IRUSR | S_IWUSR | S_IXUSR | \
   S_IRGRP | S_IXGRP | S_IXOTH);

이렇게 했다면 file 이라는 이름의 파일을 쓰기 전용으로 읽고, 파일이 없으면 751 퍼미션으로
파일을 생성하여 열어서 그 기술자를 filedes 에 반환합니다.

파일을 생성할때 영향을 줄수 있는 값으로 umask가 있는데 이 umask 는 파일을 생성할때
금지할 퍼미션을 가지고 있습니다. O_CREAT 모드로 파일을 생성할때 umask 의 영향을 받지
않으려면 umask 프로그램이나 umask 시스템 호출을 이용하여 영향을 받지 않을수 있습니다.

2-4. close 시스템 호출
#include <unistd.h>

int close(int fildes);

close 시스템 호출은 fildes 와 관련된 파일을 닫습니다. 에러가 발생하면 -1 을 반환합니다.

아래의 file_copy 프로그램은 저수준 파일 제어 시스템 호출로 파일을 복사하는 프로그램 입니다.

<< file_copy.c >>
#include <stdio.h>
#include <unistd.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <fcntl.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
 char buffer[1024];
 int infile, outfile;
 int size;

 if(argc != 3)
 {
  fprintf(stderr, "Usage: %s infile outfile", argv[0]);
  exit(1);
 }

 if((infile = open(argv[1], O_RDONLY)) == -1)
 {
  perror("open");
  exit(1);
 }

 if((outfile = open(argv[2], O_WRONLY | O_CREAT, S_IRUSR | S_IWUSR)) == -1)
 {
  perror("open");
  exit(1);
 }

 memset(buffer, 0, sizeof(buffer));

 while(read(infile, buffer, sizeof(buffer)))
 {
  write(outfile, buffer, strlen(buffer));
 }

 close(infile);
 close(outfile);

 return(0);
}

$ gcc -o file_copy file_copy.c
$ echo "hello world" > infile
$ ./file_copy infile outfile
$ cat outfile
hello world
$

file_copy 프로그램은 입력파일로 지정된 파일을 읽기 전용으로 열고 내용을 read 함수로 모두
읽어서 출력파일로 지정된 파일에 write 함수로 씁니다. 출력파일이 없다면, 600 퍼미션으로
생성 합니다.

2-5. lseek 시스템 호출
#include <unistd.h>
#include <sys/types.h>

off_t lseek(int fildes, off_t offset, int whence);

lseek 시스템 호출은 fildes와 관련된 파일에서 파일 위치 포인터를 whence 기준에서 offset 만큼
파일 위치 포인터를 이동 시킵니다.

whence의 종류는 다음과 같습니다.

SEEK_SET - 파일의 처음
SEEK_CUR - 파일의 현재 위치
SEEK_END - 파일의 마지막

lseek는 성공하면 위치를 이동하고, 실패하면 이동한 후의 파일 포인터의 위치를 반환합니다.

만약
lseek(infile, 10, SEEK_CUR);
라고 하면 infile 의 처음에서 10 만큼 위치 포인터를 이동 시킨다.

2-6. fstat, stat, lstat
#include <unistd.h>
#include <sys/stat.h>
#include <sys/types.h>

int fstat(int fildes, struct stat *buf);
int stat(const char *path, struct stat *buf);
int lstat(const char *path, struct stat *buf);

셋다 파일에 관련된 정보를 보여주는 함수지만 차이점이 있습니다. fstat는 열려있는 파일기술자와
관련된 파일에 대한 정보를 반환하고, stat와 lstat는 path에 지정된 파일에 대한 정보를 반환하지만
lstat는 링크 파일이 가르키는 파일의 정보가 아니라 링크파일 자체의 정보를 반환합니다.

구조체 stat는 위에 셋 시스템 호출에서 반환된 정보를 저장하는 구조체 변수의 타입입니다.
stat의 구조는 다음을 포함합니다.

st_mode - 파일 허용 권한과 파일 형태 정보
st_ino - 파일과 관련된 inode
st_dev - 파일이 존재하는 장치
st_uid - 파일 소유자의 사용자 식별자
st_gid - 파일 소유자의 그룹 식별자
st_atime - 마지막 액세스 시간
st_ctime - 허용권한, 소유자, 그룹, 내용에 대한 마지막 변경시간
st_mtime - 내용에 대한 마지막 변경시간
st_nlink - 파일에 대한 하드 링크의 수

st_mode에 들어가는 파일 허용 권한 플래그는 open 에서 보았던 플래그와 같고 파일형태 플래그는
다음을 포함합니다.

S_IFBLK - 블록 장치이다.
S_IFDIR - 디렉토리 이다.
S_IFCHR - 문자 장치 이다.
S_IFIFO - FIFO 이다.
S_IFREG - 일반적인 파일이다.
S_IFLNK - 기호 링크이다.

그 밖의 모드 플래그는 다음을 포함합니다.

S_ISUID - 실행 시에 setUID를 가진다.
S_ISGID - 실행 시에 setGID를 가진다.

st_mode 플래그를 변환하기 위한 마스크는 다음을 포함합니다.

S_IFMT - 파일 형태
S_IRWXU - 사용자 읽기/쓰기/실행 권한
S_IRWXG - 그룹 읽기/쓰기/실행 권한
S_IRWXO - 기타 읽기/쓰기/실행 권한

파일 형태를 테스트 하는 플래그는 다음을 포함합니다.

S_ISBLK - 블록 파일 테스트
S_ISCHR - 문자 파일 테스트
S_ISDIR - 디렉토리 테스트
S_ISFIFO - FIFO 테스트
S_ISREG - 일반적인 파일 테스트
S_ISLNK - 기호 링크 테스트

위에서 나열한 플래그 들을 사용하는 예를 봅시다.

struct stat buf;
mode_t modes;

stat("myfile", &buf);
modes = buf.st_mode;

if(S_ISDIR(modes))
{
 printf("myfile은 디렉토리 입니다.\n");
}
else if(S_ISREG(modes))
{
 printf("myfile은 일반적인 파일입니다.\n");
}
else
{
 printf("myfile은 장치나 FIFO나 기호링크 파일 입니다.\n);
}

S_IS* 테스트 플래그를 이용하여 myfile가 무슨 타입인지 테스트합니다.


2-7. dup와 dup2
#include <unistd.h>

int dup(int fildes);
int dup2(int fildes, int fildes2);

dup 시스템 호출은 지정된 파일 기술자를 사용되지 않은 가장 작은 수의 기술자로 복사합니다.
dup 시스템 호출과 비슷한 dup2는 파일기술자가 복사될 다른 파일 기술자를 닫아 주고 기술자를
그 기술자로 복사합니다.

예를 들면 copydes = dup2(4, filedes); 처럼 하면 파일기술자 4가 닫혀지고 file가 4로 복사되어
4 기술자가 copydes 로 반환됩니다.

__eof__


/***********************************************************************************************/
2단계 - 표준 입출력 라이브러리

▶ fopen
#include <stdio.h>

FILE *fopen(const char *filename, const char *mode);

fopen함수는 파일을 열고 기술자를 반환합니다. filename 인자는 파일 이름을 지정해 주는것이고
mode는 파일을 여는 방법을 지정 합니다. mode 의 종류는 다음과 같습니다.

"r" 또는 "rb" - 읽기 전용으로 연다.
"w" 또는 "wb" - 쓰기전용으로 열고, 파일이 있을때는 파일을 초기화(?) 시키고 파일이 없을때는
                새로 만든다.
"a" 또는 "ab" - 쓰기전용으로 여는데, 파일의 끝에서 부터 쓰게 한다.
"r+" 또는 "rb+" 또는 "r+b" - 읽기와 쓰기 상태로 연다.
"w+" 또는 "wb+" 또는 "r+b" - 갱신 상태(읽기와 쓰기)로 열고, 파일을 초기화 한다.
"a+" 또는 "ab+" 또는 "a+b" - 갱신상태로 열고, 파일의 끝에서 부터 쓰게한다.

fopen함수 실행이 성공하면 파일기술자를 반환하고 실패하면 NULL을 반환하고 errno변수를 변경합니다.

▶ fread
#include <stdio.h>
size_t fread(void *ptr, size_t size, size_t nitems, FILE *stream);

fread 함수는 stream 파일 기술자에서 size * nitems 크기의 데이터를 읽어와 ptr이 가르키는
변수에 저장합니다.

▶ fwrite
#include <stdio.h>
size_t fwrite(void *ptr, size_t size, size_t nitems, FILE *stream);

fwrite 함수는 fread 함수와 형식이 같지만, ptr이 가르키는 변수의 데이터를 읽어와 size * item
만큼 stream 기술자에 출력합니다.

▶ fclose
#include <stdio.h>
size_t fclose(FILE *stream);

stream 파일 기술자를 닫습니다.

▶ fflush
#include <stdio.h>

int fflush(FILE *stream);

stream 와 관계된 데이터를 즉시 쓰게 합니다.

▶ fseek
#include <stdio.h>

int fseek(FILE *stream, long int offset, int whence);

fseek 함수는 stream의 위치 포인터를 whence를 기준으로 offset만큼 이동하게 합니다.

▶ fgetc, getc, getchar
#include <stdio.h>

int fgetc(FILE *stream);
int getc(FILE *stream);
int getchar();

fgetc와 getc는 지정된 스트림에서 한문자를 읽어와 반환하고, getchar는 키보드에서 한 문자를
읽어 반환합니다. fgetc와 get는 실패하면 EOF를 반환합니다.

▶ fputc, putc, putchar
#include <stdio.h>

int fputc(int c, FILE *stream);
int putc(int c, FILE *stream);
int putchar(int c);

fputc와 putc는 지정한 스트림에 c 문자를 출력합니다. 실패하면 EOF를 반환합니다.
putchar는 화면에 한 문자를 출력합니다.

▶ fgets, gets
#include <stdio.h>

char *fgets(char *s, int n, FILE *stream);
char *gets(char *s);

fgets함수는 stream 기술자에서 n - 1만큼 데이터를 읽어와 s에 지정된 변수에 저장합니다.
실패하면 EOF를 반환합니다. gets함수는 키보드에서 데이터를 읽어 s에 지정된 변수에 저장합니다.

▶ printf, fprintf, sprintf
#include <stdio.h>

int printf(const char *format, ...);
int sprintf(char *s, const char *format, ...);
int fprintf(FILE *stream, const char *format, ...);

printf계열 함수들은 형식화된 출력을 할때 사용합니다. printf는 format에 지정된 포맷스트링과
변환문자에 대응하는 인자들을 받아 변환한후 화면에 출력할때 사용하고, sprintf는 이 출력을
s가 가르키는 문자열 변수에 쓰기를 합니다. fprintf는 출력을 stream 스트림에 합니다.

추가적인 인자를 변환하는데 쓰이는 변환지정자는 다음과 같습니다.

%d, %i - 10진수로 정수를 출력한다.
%o, %x - 8진수와 16진수로 정수를 출력한다.
%c - 문자를 출력한다.
%s - 문자열을 출력한다.
%f - 부동 소수형 값을 출력한다.
%e - 고정 형식으로 배정도값을 출력한다.
%g - 일반 형식으로 배정도값을 출력한다.

d앞에는 long int를 가르키는 l이나, short int를 가르키는 h가 붙을수 있습니다.

또, 필드 지정자라는 것이 있는데 출력공간의 폭을 설정할수 있습니다. 필드 지정자는 %문자 다음에
숫자로 주어집니다. 왼쪽을 기준으로 출력할려면 숫자 앞에 - 를 붙입니다.

출력을 성공적으로 수행했다면 출력한 문자들의 갯수를 반환하고 실패했다면 음수 값을 반환하고
errno를 설정합니다.

▶ scanf, fscanf, sscanf
#include <stdio.h>

int scanf(const char *format, ...);
int fscanf(FILE *stream, const char *format, ...);
int sscanf(const char *s, const char *format, ...);

scanf계열 함수는 형식화된 입력을 할때 사용합니다. printf함수와 마찬가지로 포맷스트링을 인자로
받습니다. scanf는 키보드에서 입력을 받아 format의 변환문자에 대응되는 추가적인 인자에, 입력
받은것을 각각 저장해 놓습니다. fscanf는 이 입력을 stream 스트림에서 받고, sscanf는 s문자열 에서
입력을 받습니다.

유용한 포맷스트링에 %[] 와 %%가 있는데, %[]는 괄호 안에 있는 숫자 만큼만 받아서 인자에 저장하고
%% 는 %를 입력받습니다.

▶ 그밖의 스트림 함수들

fgetpos - 파일 스트림에서 현재 위치를 구한다.
fsetpos - 파일 스트림에서 현재 위치를 설정한다.
ftell - 스트림에서 현재 파일 오프셋을 반환한다.
rewind - 스트림에서 파일 위치를 재설정 한다.
freopen - 파일 스트림을 재사용한다.
setvbuf - 스트림을 위한 버퍼링 구성을 설정한다.
remove - path파라미터가 디렉토리가 아니라면 unlink와 같고, 디렉토리이면 rmdir과 같다.

▶ 스트림 에러 관련 함수들
#include <stdio.h>

int ferror(FILE *stream);
int feof(FILE *stream);
void clearerr(FILE *stream);

ferror은 스트림의 에러지시자를 테스트하고, 이것이 설정되면 0이 아닌 값을 반환하고,
그렇지 않으면 0을 반환한다.
feof는 스트림이 끝인지 알아보고 끝이 아니라면 0이 아닌 정수값을 반환하고 끝이라면 0을 반환한다.
clearerr은 stream이 가리키는 스트림의 파일 마지막 지시자와 에러지시자를 지운다.

▶ fileno, fdopen
#include <stdio.h>

int fileno(FILE *stream);
FILE *fdopen(int fildes, const char *mode);

fileno함수는 stream이 어떤 파일 기술자를 사용하는지 알아보고 그 기술자를 반환한다.
fdopen은 fildes 기술자를 기반으로 새로운 스트림을 만듭니다.


__eof__
/***********************************************************************************************/
3단계 - 디렉토리, 화일시스템 및 특수화일

+ 파일과 디렉토리 관리
▶ chmod
#include <sys/stat.h>

int chmod(const char *path, mode_t mode);

chmod 는 path에 지정된 파일의 퍼미션을 mode와 같이 바꾼다. 여기서 mode는 OR연산으로 각각의
권한과 조합되고, open()의 mode 인자와 같은 플래그를 갖는다.

▶ chown
#include <unistd.h>

int chown(const char *path, uid_t owner, gid_t group);

chown 는 path에 지정된 파일의 소유자와 소유 그룹을 owner인자에 지정된 uid와 group에 지정된
gid로 바꾼다.

▶ unlink, link, symlink
#include <unistd.h>

int unlink(const char *path);
int link(const char *path1, const char *path2);
int symlink(const char *path1, const char *path2);

unlink 시스템 호출은 path에 지정된 파일의 링크를 끊어버려 파일을 삭제 한다.
link 시스템 호출은 path1에 지정된 파일에 path2에 지정된 파일이름으로 하드링크를 건다.
symlink 시스템 호출은 path1에 지정된 파일에 path2에 지정된 파일 이름으로 심볼릭 링크를 건다.

▶ mkdir, rmdir
#include <sys/stat.h>

int mkdir(const char *path, mode_t mode);

mkdir 시스템 호출은 path에 지정된 이름과 mode 퍼미션으로 디렉토리를 생성한다.

#include <unistd.h>

int rmdir(const char *path);

rmdir 시스템 호출은 path에 지정된 이름을 가지는 비어있는 디렉토리를 지운다.

▶ chdir, getcwd
#include <unistd.h>

[bang1575@RealSkulls system]$ cat system3.txt
3주차 - 디렉토리, 화일시스템 및 특수화일

+ 파일과 디렉토리 관리
▶ chmod
#include <sys/stat.h>


int chmod(const char *path, mode_t mode);

chmod 는 path에 지정된 파일의 퍼미션을 mode와 같이 바꾼다. 여기서 mode는 OR연산으로 각각의
권한과 조합되고, open()의 mode 인자와 같은 플래그를 갖는다.

▶ chown
#include <unistd.h>

int chown(const char *path, uid_t owner, gid_t group);

chown 는 path에 지정된 파일의 소유자와 소유 그룹을 owner인자에 지정된 uid와 group에 지정된
gid로 바꾼다.

▶ unlink, link, symlink
#include <unistd.h>

int unlink(const char *path);
int link(const char *path1, const char *path2);
int symlink(const char *path1, const char *path2);

unlink 시스템 호출은 path에 지정된 파일의 링크를 끊어버려 파일을 삭제 한다.
link 시스템 호출은 path1에 지정된 파일에 path2에 지정된 파일이름으로 하드링크를 건다.
symlink 시스템 호출은 path1에 지정된 파일에 path2에 지정된 파일 이름으로 심볼릭 링크를 건다.

▶ mkdir, rmdir
#include <sys/stat.h>

int mkdir(const char *path, mode_t mode);

mkdir 시스템 호출은 path에 지정된 이름과 mode 퍼미션으로 디렉토리를 생성한다.

#include <unistd.h>

int rmdir(const char *path);

rmdir 시스템 호출은 path에 지정된 이름을 가지는 비어있는 디렉토리를 지운다.

▶ chdir, getcwd
#include <unistd.h>

int chdir(const char *path);
char *getcwd(char *buf, size_t size);

chdir는 path에 지정된 디렉토리로 현재 디렉토리를 이동한다.
getcwd는 buf에 지정된 변수에 size만큼 현재 디렉토리 이름을 저장한다.


+ 디렉토리
▶ opendir
#include <sys/types.h>
#include <dirent.h>

DIR *opendir(const char *name);

opendir은 name에 지정된 디렉토리를 열어서 디렉토리 스트림을 생성하고 DIR구조체에 대한
포인터를 반환하고 함수실행을 실패하면 널 포인터를 반환한다.

▶ readdir
#include <sys/types.h>
#include <dirent.h>

struct dirent *readdir(DIR *dirp);

readdir은 dirp에 지정된 DIR 구조체를 참조하여 다음 디렉토리 항목의 정보(dirent구조체)에
대한 포인터를 반환한다.

dirent구조체의 멤버는 다음을 포함한다.

ino_t d_ino - 파일의 inode
char d_name[] - 파일의 이름

▶ telldir
#include <sys/types.h>
#include <dirent.h>

long int telldir(DIR *dirp);

telldir 함수는 dirp 디렉토리 스트림이 현재 가르키는 디렉토리 항목 위치를 반환한다.

▶ seekdir
#include <sys/types.h>
#include <dirent.h>

void seekdir(DIR *dirp, long int loc);

seekdir 함수는 dirp 디렉토리 스트림에서 디렉토리 항목 포인터를 설정한다. loc 에 지정된
수만큼 설정한다.

▶ closedir
#include <sys/types.h>
#include <dirent.h>

int closedir(DIR *dirp);

closedir 함수는 dirp디렉토리 스트림을 닫는다.

▶ 예제
다음은 인자로 주어진 디렉토리의 파일 목록을 현재 디렉토리 위치와 함께 출력한다.
<printdir.c>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <dirent.h>

char dirname[256], buffer[256];

void printdir(char *dir)
{
        DIR *dp;
        struct dirent *dir_info;
        struct stat dir_stat;

        if((dp = opendir(dir)) == NULL)
        {
                perror("opendir");
                return(1);
        }

        chdir(dir);

        while((dir_info = readdir(dp)) != NULL)
        {
                lstat(dir_info->d_name, &dir_stat);

                if(S_ISDIR(dir_stat.st_mode))
                {
                        if(strcmp(".", dir_info->d_name) == 0 || strcmp("..", dir_info->d_name) == 0)
                                continue;
                        getcwd(dirname, sizeof(dirname));

                        if(!strncmp(dirname, "/", 1))
                                printf("%s/%s/\n", dirname, dir_info->d_name);
                        else
                                printf("/%s/%s/\n", dirname, dir_info->d_name);
 
                        printdir(dir_info->d_name);
                }
                else
                {
                        getcwd(dirname, sizeof(dirname));
                        printf("%s/%s\n", dirname, dir_info->d_name);
                }             
        }

        chdir("..");

        closedir(dp);
}

int main(int argc, char *argv[])
{
        if(argc != 2)
        {
                fprintf(stderr, "Usage: %s filename\n", argv[0]);
                exit(1);
        }

        printdir(argv[1]);

        return(0);
}

이 예제는 실용성은 없어 보이지만-_- 파일/디렉토리 관련 함수를 설명하기에는 충분한?같다.


+ fcntl
#include <fcntl.h>

int fcntl(int fildes, int cmd);
int fcntl(int fildes, int cmd, long arg);

fcntl 함수는 fildes 기술자를 cmd에 지정된 값에 따라 다른 제어를 한다. cmd에 따라 선택적인 인자
arg를 갖는다. fcntl함수에 대한 자세한 사항은 man페이지를 참조하자.

__eof__
/***********************************************************************************************/
4단계 - 프로세스

1. 프로세스란
프로세스는 쉽게, "현재 실행중인 프로그램" 으로 볼수 있다. 유닉스나 리눅스와 윈도우 같은
운영체제에서는 멀티태스킹 기능이 지원되어 동시에 많은 프로그램을 실행시킬수 있는데, 이는
우리의 눈에는 동시에 실행되는 것처럼 보이지만, 실제로는 각각의 프로세스의 우선순위에 따라
CPU 를 점유하며 프로세스들 하나하나씩 실행된다. 그 CPU를 점유하는 시간이 매우 짧기 때문에
우리눈에는 마치 동시에 실행되는것처럼 보이는 것이다.

2. 프로세스의 구조와 ps 명령
각각의 프로세스는 실행되면서, 프로세스를 구분할때 쓰이는 PID와 소스코드와 변수와 라이브러리
또 file 식별자 등을 갖게된다. 라이브러리에는 공유될수 있는 라이브러리인 공유라이브러리가
있는데, 공유 라이브러리는 메모리에 하나의 함수 사본만을 갖게 되므로 라이브러리 코드를 갖지
않으므로 크기를 줄일수 있다.

프로세스를 볼때는 ps 명령을 사용할수 있다. ps만을 실행하면 자신이 실행하고 있는 프로세스의
목록이 뜨게되고, -ax나 -aux옵션과 함께 실행하면 루트나 다른사람들이 실행하고 있는 프로세스와
자세한 정보를 볼수있다.

또한 nice 명령을 실행하여 프로세스의 우선순위를 변경할수 있다. nice와 함께 프로그램을
실행하면 기준값인 10을 갖게 되고 renice를 실행하면 값을 변경할수 있다. ps 명령의 옵션을 -l
나 -f로 해서 실행하면 NI열을 통해 기준값을 볼수있다.

3. 프로세스 시작, 생성, 기다리기
3-1. 명령 실행하기
쉘에서 명령어을 실행하기 위해서는 system 함수를 사용할수 있다.

#include <stdlib.h>

int system(const char *string);

system 함수는 string에 전달된 명령을 쉘로 전달하여 실행하게 한다. 만약

        system("ls -al");

를 실행한다면 현재 디렉토리의 모든 파일 목록이 출력되고 프로그램 실행이 제개될것이다.
system은 쉘을 사용하기 때문에 와일드 카드 확장이 가능하고 & 로 명령의 백그라운드 실행이
가능하다. 하지만 & 로 명령을 실행한다면 쉘이 명령어 실행을 끝내면 바로 리턴하기 때문에
실행된 명령어가 출력을 한다면 뒤죽박죽이 될수 있으므로 주의하자.

3-2. 명령 실행하기2
C에서 프로그램을 시작하기 위해서 사용되는 또다른 함수인 exec계열 함수들이 있다. 이 함수들은
system함수와 비슷하지만 인자를 넘겨줄수 있고, 프로세스를 실행하려는 프로세스로 대체한다.
exec계열의 함수들은 여러가지가 있는데 다음 함수 원형을 보자.

#include <unistd.h>

char **environ;

int execl(const char *path, const char *arg0, ..., (char *)0);
int execlp(const char *file, const char *arg0, ..., (char *)0);
int execle(const char *path, const char *arg0, ..., (char *)0, const char *envp[]);
int execv(const char *path, const char *argv[]);
int execvp(const char *file, const char *argv[]);
int execve(const char *path, const char *argv[], const char *envp[]);

execl, execlp, execle는 널포인터로 끝나는 변칙적인 수의 인수를 받아 들이는데, execl는
path에 전달된 프로그램을 변칙적인 수의 인수와 함께 실행하여 현재 프로세스와 대체 하고,
execlp는 execl과 같지만 PATH 환경 변수를 검색한다. 실행파일에 대한 절대경로가 없을때
실행하려 할때 필요 할것이다. 또, execle는 대체될 새로운 프로세스의 환경을 지정한 스트링의
배열을 인자로 받는다.

execv, execvp, execve는 execl* 과 비슷하게 동작하지만 선택적인 인자를 스트링의 배열로 받는다.

3-3. 프로세스 생성(복제)
프로세스를 생성하기 위해서는 fork() 를 호출할수 있다.

#include <sys/types.h>
#include <unistd.h>

pid_t fork(void);

fork 는 현재의 프로세스를 복사하여 자식프로세스를 생성하고 부모프로세스에게는 자식프로세스의
pid를 자식 프로세스에게는 0을 반환한다. 프로세스를 생성하기 위해서는 fork 로 생성된 자식
프로세스에서 exec 계열 함수를 호출하면 될것이다.

복사되어 생성된 자식 프로세스는 fork() 를 실행한 이후의 코드부터 실행된다.

부모와 자식은 fork로 부터 반환된 pid로 구별로 구별될수 있을것이다.

3-4. 프로세스 기다리기
fork로 자식과 부모관계를 형성 하고 난후, 부모가 먼저 종료되고 자식이 출력을 한다면 출력
화면이 복잡해지고 엉망진창이 될것이다. 이런 경우를 대비하여 부모프로세스를 자식프로세스가
종료될때 까지 기다리게 할수 있다. 자식프로세스가 종료될때까지 기다리게 할때는 wait를 사용해야
한다.

#include <sys/type.h>
#inlcude <sys/wait.h>

pid_t wait(int *stat_loc);

wait 시스템 호출은 자식프로세스가 종료될때까지 기다리고, 종료되면 종료된 자식프로세스의
pid를 반환하고 stat_loc가 널이 아니라면 stat_loc가 가르키는 변수에 종료상태를 저장할것이다.

종료상태를 검사하는 매크로를 사용하여 정보를 구할수 있을것이다.

WIFEXITED(stat_val) - 자식 프로세스가 정상적으로 종료되면 0이 아님
WEXITSTATUS(stat_val) - WIFEXITED가 0이 아니면 이것은 자식프로세스의 종료 코드를 반환한다
WIFSIGNALED(stat_val) - 자식 프로세스가 처리할 수 없는 시그널에 의해 종료되면 0이 아님
WTERMSIG(stat_val) - WIFSIGNALED 가 0이 아니면 이것은 시그널의 번호를 반환한다
WIFSTOPPED(stat_val) - 자식프로세스가 중단되었다면 0이 아님
WSTOPSIG(stat_val) - WIFSTOPPED가 0이 아니면 이것은 시그널의 번호를 반환한다

3-5. 좀비프로세스
부모와 자식 관계에서 자식이 먼저 종료되면, 부모가 정상적으로 종료될때 까지나 wait를 호출 할때
까지 wait에서 받아들이는 종료코드를 유지해야 하므로 자식은 좀비 프로세스로 남겨지게 된다.
좀비프로세스는 부모가 정상적으로 종료되지 않았다면 PPID(Parent PID) 가 1(init)로 된다.
좀비프로세스들은 init가 정리할때까지 남겨지게되어 리소스를 낭비하게 된다.

특정 자식 프로세스를 기다리게 하는 함수인 waitpid가 있다.

#include <sys/types.h>
#include <sys/wait.h>

pid_t waitpid(pid_t pid, int *stat_loc, int options);

waitpid는 pid에 지정된 pid를 갖고잇는 프로세스를 options에 지정된 값에 맞게 기다리거나,
반환하고 stat_loc에 상태를 저장한다. options의 종류는 다음과 같다.

WUNTRACED - 자식프로세스를 기다린다.
WNOHANG - 자식프로세스가 종료되지않았다면 0을 반환하고 그렇지 않으면 자식프로세스의 pid를
반환하고 stat_loc가 가르키는 변수에 상태를 저장한다.

다음은 wait를 호출했을때와 같은 효과를 낸다.

        waitpid(child_pid, &stat_loc, WUNTRACED);


3-6. 입출력 재지정
exec 계열 함수들은 파일 기술자를 물려받으므로 어떤 파일기술자를 표준입력이나 표준출력 기술자
으로 복사한다면, exec 함수로 인해 대체된 프로세스에서는 재지정된 입/출력을 사용할수 있을것이다.

__eof__
/***********************************************************************************************/
5단계 - 시그널과 시그널 처리

1. 시그널이란?
시그널은 프로세스가 어떤 조건에 대응하여 동작을 수행할 수 있도록 유닉스 시스템에 의해 발생되는
이벤트이다. 프로세스가 메모리 침범, 부동소수 처리 에러나 부적절한 지시어와 같이 일부 에러 조건에
의해 생성되거나 직접 사용자에 의해 생성된다.

2. 시그널의 종류
SIGABORT - *프로세스 취소
SIGALRM - 알람 시계
SIGFPE - *부동 소수 예외
SIGHUP - 접속 끊김
SIGILL - *부적절한 지시어
SIGINT - 터미널 인터럽트
SIGKILL - 처리하거나 무시할 수 없는 상태
SIGPIPE - 리더가 없는 파이프에 대한 쓰기
SIGQUIT - 터미널 종료
SIGSEGV - *무효한 메모리 세그먼트 액세스
SIGTERM - 종료
SIGUSR1 - 사용자 정의 시그널 1
SIGUSR2 - 사용자 정의 시그널 2

설명 앞에 *가 붙은것은 시스템에 따라 덤프파일을(core) 생성한다.

2. 시그널 처리
시그널을 처리할때 쓰는 기본적인 함수는 signal() 이다.

#include <signal.h>

void (*signal(int sig, void (*func)(int)))(int);

signal 함수는 sig인자에 지정된 시그널이 프로세스에 발생되면 func 함수 포인터가 가르키는 함수를
생성한다. func 함수 포인터가 가르키는 함수는 하나의 int 인자를 갖고 있어야 되는데, 이는 발생한
시그널 번호를 넣어주기 위함이다.

func에 지정될수 있는 개별적인 값은 다음과 같다.

SIG_IGN - 시그널을 무시한다.
SIG_DFL - 기본 동작을 복구한다.

지정된 시그널을 무시하거나 기본동작을 복구할때 위의 두 값을 사용할수 있을것이다.
signal함수는 성공하면 func에 지정된 함수포인터를 반환한다.

다음 예제는 signal 함수로 시그널을 처리하는 예이다.

<signal.c>
#include <signal.h>
#include <stdio.h>
#include <unistd.h>

void sig_int(int sig)
{
        printf("This is INT signal handler!!\n");
        (void) signal(SIGINT, SIG_DFL);
}

int main()
{
        int count = 0;

        (void) signal(SIGINT, sig_int);

        while(1)
        {
                printf("%d\n", count);
                sleep(1);
                count++;
        }
}

3. 시그널 전달하기
시그널을 전달할때는 명령어 kill 과 비슷한 kill 함수를 사용한다.

#include <sys/types.h>
#include <signal.h>

int kill(pid_t pid, int sig);

kill 함수는 pid 에 지정된 PID에 해당하는 프로세스에 sig 시그널을 보낸다. 성공할 경우에는 0을
반환한다.
시그널을 전달할때에는 pid 프로세스가 자신의 권한과 같아야 한다. 루트라면 어느 프로세스라도
시그널을 전달할수 있다.

한가지 유용한 함수로는 alarm이 있는데 이것은 지정된 초 후에 SIGALRM 시그널을 전달한다.

#include <unistd.h>

unisigned int alarm(unsigned int seconds);

4. 안정적인 시그널 인터페이스
시그널을 처리하는데 signal함수를 사용하겠지만, 그보다더 안정적인 처리를 지원하는 sigaction()
함수를 사용하는것이 좋다.

#include <signal.h>

int sigaction(int sig, const struct sigaction *act, struct sigaction *oact);

sigaction은 sig 시그널을 sigaction 구조체에 지정된 수행할 동작들에 따라 처리한다. act는
sigaction 구조체를 지정하고 oact에는 sig 시그널의 이전 동작을 기록한다.

sigaction 구조체의 멤버들은 다음과 같다.

void (*) (int) sa_handler /* 함수, SIG_DFL 또는 SIG_IGN */
sigset_t sa_mask /* sa_handler에서 방지할 시그널 */
int sa_flags /* 시그널 동작 변경자 */

sa_mask에 들어가야 하는 값은 sa_handler에서 방지할 시그널을 말하는데, 이것은 시그널 핸들러가
진행중일때 어떠한 시그널이 전달되어 시그널 핸들러가 중단 되는것을 방지하기 위함이다.
sa_flags에 포함될수 있는 값들은 다음과 같다.

SA_NOCLDSTOP - 자식 프로세스가 중단할 때 SIGCHLD를 생성하지 않는다.
SA_RESETHAND - 시그널을 전달받을 때의 동작을 SIG_DFL로 재설정한다.
SA_RESTART - EINTR에 대해 에러가 아니라 인터럽트 가능 함수를 재시작 한다.
SA_NODEFER - 시그널을 가로챌 때 시그널 마스크에 시그널을 추가하지 않는다.

5. 시그널 모음
시그널 모음은 시그널 블록 함수나 sigaction 구조체의 sa_mask 등에서 사용될 시그널을 모은것이다.
시그널 모음을 처리할때 쓰는 함수는 다음과 같다.

#include <signal.h>
int sigaddset(sigset_t *set, int signo);
int sigemptyset(sigset_t *set);
int sigfillset(sigset_t *set);
int sigdelset(sigset_t *set, int signo);
int sigismember(sigset_t *set, int signo);

sigaddset - set이 가르키는 시그널 모음에 signo 시그널을 추가한다.
sigemptyset - set 시그널 모음을 빈 상태로 초기화 한다.
sigfillset - set 시그널 모음이 모든 시그널을 포함하도록 초기화 한다.
sigdelset - set 시그널 모음에서 signo 시그널을 삭제한다.
sigismember - set 시그널 모음에 signo 시그널이 있는지 검사한다.

시그널 마스크를 설정 할때에는 sigprocmask 함수를 사용한다.

#include <signal.h>

int sigprocmask(int how, const sigset_t *set, sigset_t *oset);

how는 시그널 마스크를 변경시킬 방법을 지정하는 값이고, set은 기록할 시그널 모음이고 oset는
이전의 시그널 마스크가 기록된다.

how 인자는 다음중 하나가 될수 있다.

SIG_BLOCK - set의 시그널이 시그널 마스크에 추가된다.
SIG_SETMASK - 시그널 마스크는 set으로 설정된다.
SIG_UNBLOCK - set의 시그널이 시그널 마스크로부터 제거된다.

sigprocmask는 성공적이면 0을 반환하고, -1을 반환하고 errno를 설정한다.

프로세스에 의해 방지되는 시그널은 전송되지 않지만 남아 있을 것이다. 프로그램은 sigpending 함수로
이 시그널을 확인할수 있다.

#include <signal.h>

int sigpending(sigset_t *set);

set에 전송되지 않은 시그널이 기록될 것이다.

프로세스는 시그널이 전달 될때까지 실행을 중지하기 위해 sigsuspend 함수를 사용할수 있다.

#include <signal.h>

int sigsuspend(const sigset_t *sigmask);

sigsuspend는 시그널 마스크를 sigmask에 지정된 시그널 모음으로 대체하고 실행을 중지할 것이다.
이것은 시그널을 받아 시그널 핸들러가 실행된 이후에 다시 재개할 것이다. 전달된 시그널이 프로그램을
종료하지 않으면 sigsuspend는 errno를 EINTR로 설정하고 -1을 반환한다.
/***********************************************************************************************/
6단계 - 프로세스간 통신 : 파이프

1. 파이프란 무엇인가?
파이프는 한 프로세스의 출력을 특정 프로세스의 입력으로 연결 시켜주는 방법을 의미한다.
실제 생활에서의 파이프를 생각해 보자. 실생활에서의 파이프는 물을 이동하게 해주거나 까스
배관등으로 쓰이는데, 파이프의 한쪽으로 물을 넣으면 다른 한쪽에서는 그 물이 나온다. 또,
한쪽으로 까스를 넣으면 다른 한쪽에서 까스가 나온다. 이런것들과 같은 개념으로 컴퓨터의
파이프를 본다면 파이프의 한쪽에 데이터를 집어 넣으면 다른 한쪽에서는 그것을 읽어 들일수
있는것으로 이해될수 있을 것이다.

쉘에서는 직접 파이프를 이용하는 프로그램을 짜지 않아도 파이프를 이용할수 있는 기능을
제공한다.
예를 들어

  $ ls -al | wc -l

이렇게 한다면 ls -al 명령을 실행할때 출력되는 데이터가 wc -l 명령의 표준 입력으로
받아질 것이다.

2. 파이프 사용하기(popen, pclose)
▶ popen
#include <stdio.h>

FILE *popen(const char *command, const char *open_mode);

popen 함수는 command 에 지정된 프로그램을 새로운 프로세스를 생성하여 실행하고
open_mode 에 지정된 값에 따라 그 프로세스에서 보내온 데이터를 읽거나, 데이터를 써서
그 프로세스의 표준입력으로 받아 들일수 있게 한다.
즉, 특정 프로세스와의 파이프를 생성해주는 함수이다.

open_mode에는 "r" 또는 "w" 가 들어갈수 있다. r 로 지정하면 파이프와 연결된 다른
프로세스의 출력을 이 프로세스에서 받아들일수있다. w 로 지정하면 r과 반대 기능을
수행한다.

popen함수는 파이프를 성공적으로 생성하면 그 파이프에 대한 파일 스트림을 반환하고,
실패하면 -1 를 반환한다.

▶ pclose
#include <stdio.h>

int pclose(FILE *stream_to_close);

pclose 함수는 stream_to_close에 지정된 파일스트림(파이프)를 닫는다. pclose는 파이프와
연결된 다른 프로세스가 종료되지 않았다면 그 프로세스가 끝날때까지 대기할 것이다.

성공하면 파이프에 연결됬었던 프로세스의 종료코드를 반환할것이고, 실패하면 -1를 반환
할것이다.


다음은 popen함수와 pclose함수를 사용하는 예제이다.

<< popen.c >>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char *argv[])
{
        FILE *in, *out;
        char string[256] = { 0x00, };
        int chars_read;

        if(argc < 3)
        {
                fprintf(stderr, "Usage: %s [command1] [filename]\n", argv[0]);
                exit(1);
        }

        if((out = popen(argv[1], "w")) == NULL)
        {
                perror("popen");
                exit(1);
        }

        if((in = fopen(argv[2], "r")) == NULL)
        {
                perror("fopen");
                exit(1);
        }

        while((chars_read = fread(string, sizeof(char), sizeof(string), in)) > 0)
        {
                fwrite(string, sizeof(char), chars_read, out);
        }

        pclose(out);
        fclose(in);

        return(0);
}
$ gcc -o popen popen.c
$ ./popen cat popen.c
#include <unistd.h>
#include <stdio.h>
.
.
나머지 파일 내용
.

이 프로그램은 두번째 인자로 지정된 파일을 읽어 들여 popen을 사용하여 열려진 파이프를
이용하여 첫번째 인자로 지정된 프로그램에 쓴다. 그 결과 데이터를 받은 프로세스는
데이터를 처리하고 결과를 출력한다.

popen에 대한 부가적인 설명을 덧붙이자면, popen은 쉘에서 command 프로그램을 실행하기
때문에 쉘 확장이 가능하다. * 같은 문자를 사용할수 있다는 뜻이다.
 
3. 파이프 사용하기2(pipe)
▶ pipe
파이프를 생성할때 사용하는 또다른 함수는 pipe이다.
#include <unistd.h>

int pipe(int fd[2]);

pipe 함수는 두개의 정수형 변수로 구성되는 배열을 받고, 파이프를 생성하여 fd[0] 에는
파이프의 읽기 부분을 가르키는 파일 기술자를 넣어주고, fd[1] 에는 파이프의 쓰기 부분을
가르키는 파일기술자를 넣어주고 0을 반환한다. 실패할 경우 -1를 반환하고 errno를 설정한다.

pipe함수를 실행하고 나서 fd[1] 에 데이터를 쓰기를 할경우 fd[0]에서 읽을수 있다.
프로세스 안에서만 쓰기/읽기를 할경우 파이프의 존재가 별로 도움이 안될것이지만, fork를
사용하여 자식 프로세스를 생성함으로써 부모프로세스와 자식프로세스와의 통신을 할수
있을것이다. pipe를 사용하고 나서 부모/자식간에 데이터를 주고 받을려면 관련없는
파이프 기술자는 닫혀져야 한다.

또, pipe함수는 popen함수와 달리 파일 기술자를 반환하기 때문에 read()와 write()를
이용하여 읽거나 쓰여야한다.

pipe함수와 read, write 사용하여 부모와 자식간의 데이터 전송을 보여준 예제를 보자.
<< pipe.c >>
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>

int main()
{
 int fd[2];
 int size;
 char buffer[256];
 pid_t child_pid;

 pipe(fd);
 
 if((child_pid = fork()) == -1)
 {
  perror("fork");
  exit(1);
 }
 else if(child_pid == 0)
 {
  close(fd[1]);
  size = read(fd[0], buffer, sizeof(buffer));
  printf("Result: %s, %d bytes\n", buffer, size);
  close(fd[0]);

  exit(0);
 }
 else
 {
  close(fd[0]);
  size = write(fd[1], "Hello, World!", 14);
  printf("Result: written %d bytes\n", size);

  close(fd[1]);
 }
 return(0);
}

$ gcc -o pipe pipe.c
$ ./pipe
Result: written 14 bytes
$ Result: Hello, World!, 14 bytes  

위 프로그램에서는 pipe로 파이프를 생성하고 부모는 자식에게 파이프로 데이터를 전달하고
자식에선 그걸 전달받아 출력하였다. 부모가 데이터를 보내고 먼저 종료 되니 위와 같이
출력이 복잡하게 된것을 볼수 있다.

부모와 자식의 통신에선 표준 입력 또는, 표준 출력으로 파이프를 관련 시키기 위해선
dup, dup2 함수의 호출이 필요하다.

▶ dup, dup2
#include <unistd.h>

int dup(int file_descriptor);
int dup2(int file_descriptor_one, file_descriptor_two);

dup함수는 file_descriptor 파일기술자를 현재 열려있지 않은 가장 낮은 파일기술자로
복사한다. dup2는 file_descriptor_two에 지정된 파일기술자를 닫고 파일기술자가 그
파일기술자로 복사 되게 한다.

앞에서 부모와 자식의 통신에선 dup, dup2 가 필요할수 있다고 했다. 파이프를 표준입력이나
표준 출력과 연관 시킬려면 close()를 이용해 0이나 1을 닫고 파이프 기술자를 0이나 1로
복사해야 한다. 만약 부모에서 파이프로 보낸 데이터를 자식에서 표준 입력으로 받기 원한다면
fork 호출후 자식프로세스에서 close(0); 로 표준 입력을 닫고 dup(pipe[0]); 으로 파이프의
입력쪽을 표준입력으로 만들면 될것이다. 그 후로는 부모에서 데이터를 보내면 자식에서는
표준입력으로 그것을 받아 볼수 있을것이다. 또, exec 계열 함수를 이용하면 파일 기술자가
상속되기 때문에 다른 개별적인 프로그램과 파이프를 이용하여 데이터를 주고 받을수 있을것이다.

이것을 간단한 예제로 나타내면 다음과 같다.
=================================================================
 .
 .
 child_pid = fork();
 if(child_pid == 0) {
  close(0);
  dup(pipe[0]);
  close(pipe[0]);
  close(pipe[1]);

  execlp("uname", "uname", "-a", NULL);
 }
 else {
  close(pipe[0]);
 .
 .
=================================================================

4. 명명 파이프 : FIFO
명명파이프로 알려진 FIFO는 파이프와 개념은 같지만 파일시스템 안에 실제 파일로 존재
한다. 기존의 파이프는 부/모 관계에있는 프로세스에게만 정보를 주거나 받을수 있지만
이 FIFO는 파일시스템 안에 파일로 존재 하기때문에 어떠한 프로세스라도 정보를 공유
할수 있다.

우선, FIFO 파일을 만들때 쉘에서 사용하는 명령부터 알아보자. FIFO파일을 만들기 위해서는
mknod 명령이나 mkfifo 명령을 사용한다. 사용법은 다음과 같다.

$ mknod filename p
$ mkfifo filename

프로그램 내에서 FIFO를 생성할수 있는 함수 역시 위에 나온 것들과 같다.

#include <sys/types.h>
#include <sys/stat.h>

int mkfifo(const char *filename, mode_t mode);
int mknod(const char *filename, mode_t mode | S_IFIFO, (dev_t) 0);

filename 은 생성할 FIFO 파일이름을 의미하고 mode는 생성할때 쓰일 퍼미션을 지정해주면
된다. mode는 umask에 의해 제한받을수 있다.

FIFO파일을 액세스 하는 방법은 기존의 파일들을 액세스 하는 방법과 흡사하다.
먼저, open이나 fopen 호출해야 한다. open의 옵션 인자에 따라 FIFO가 동작하는 방법도
달라지는데 그 경우를 살펴보자.

open(const char *path, O_RDONLY);
이경우에 open은 이미 O_WRONLY 로 파일이 다른 프로세스로 인해 열려 있다면 즉시 반환하고
그렇지 않다면 O_WRONLY 로 열려질때까지 대기할것이다.
open(const char *path, O_RDONLY | O_NONBLOCK);
FIFO가 O_WRONLY로 열려있지 않았더라도 즉시 반환한다.
open(const char *path, O_WRONLY);
FIFO가 O_RDONLY로 이미 열려져있다면 즉시 반환하고, 그렇지 않다면 O_RDONLY로 열려질때
까지 대기할 것이다.
open(consht char *path, O_WRONLY | O_NONBLOCK);
이경우에는 O_RDONLY 로 이미 열려있었다면 정상적인 기술자를 반환할것이지만, 그렇지
않다면 -1를 반환할 것이다.

O_NONBLOCK 이 붙지 않은 옵션을 갖고 열려진다면, 그 기술자에 대해 read나 write의
수행은 데이터를 읽거나 쓸수 있을때까지 방지될것이다.
그러나 O_NONBLOCK이 붙은 옵션을 갖고 열려진다면, read나 write가 방지되지 않고
0을 반환할것이다.

open으로 열었다면, 이제는 read로 FIFO로 들어오는 데이터를 읽거나 write로 FIFO로
데이터를 쓰면 된다. 그리고 모든 데이터를 처리 했다면 끝났다는걸 알리위해 close()로
기술자를 닫으면 될것이다.

파이프나 FIFO에 한번에 데이터를 기록할수 있는 크기는 PIPE_BUF 상수를 통해 정의
되어 있다. PIPE_BUF이상의 데이터를 기록하고자 한다면 일부 데이터만 기록할 것이다.

다음은 FIFO를 이용하여 서버와 클라이언트 간에 정보를 공유하는 것을 보여주는 예제이다.
<< server.c >>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <limits.h>
#include <sys/types.h>
#include <sys/stat.h>

#define FIFONAME "/tmp/my_fifo"

int main()
{
 int fd, nbytes;
 char buffer[PIPE_BUF];
 
 mkfifo(FIFONAME, 0777);
 fd = open(FIFONAME, O_RDONLY);
 
 do {
  nbytes = read(fd, buffer, sizeof(buffer));
  if(nbytes > 0)
   printf("%s", buffer);
 } while(nbytes > 0);

 close(fd);
 unlink(FIFONAME);
 
 return(0);
}

<< client.c >>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <limits.h>
#include <sys/types.h>
#include <sys/stat.h>

#define FIFONAME "/tmp/my_fifo"

int main()
{
 int fd;
 int count;
 char buffer[PIPE_BUF];
 
 fd = open(FIFONAME, O_WRONLY);
 
 while(count < 5)
 {
  sprintf(buffer, "Hello, World! - %d\n", count);
  write(fd, buffer, strlen(buffer));
  count++;
 }

 close(fd);
 return(0);
}

$ gcc -o server server.c;gcc -o client client.c
$ ./server &
$ ./client
Hello, World! - 1
Hello, World! - 2
Hello, World! - 3
Hello, World! - 4
Hello, World! - 5
[1]+  Done                    ./fifo1
$

그다지 효율적인 예제는 아니지만 FIFO를 설명하는데는 충분할것이다.

__eof__
/***********************************************************************************************/
7단계 - IPC : 세마포어, 메시지큐, 공유메모리

1. 세마포어
세마포어는 프로세스들이 하나의 리소스를 액세스하려 할때, 단 하나의 프로세스만이 리소스를
제어할수있게 해주는 일종의 변수이다.
세마포어는 두가지 형태가 있는데 0과 1의 값만 가질수있는 변수인 바이너리 세마포어와
1이상의 양수값을 가질수 있는 범용 세마포어로 나뉘어 진다. 범용 세마포어보다는 바이너리
세마포어가 많이 쓰인다.

세마포어 변수는 1이나 다른 양수의 값(범용 세마포어)으로 초기화 되는데, 이 세마포어
변수는 다수의 프로세스에 의해 더해지거나 빼진다. 그 다수의 프로세스는 같은 리소스를
액세스하기 위해 세마포어 변수를 공유한다. 세마포어 변수가 -1이 되어 0이 된다면 특정섹션
에 진입하게 되고 그 섹션이 다시 세마포어 변수를 +1 하여 0이상의 값이 되지 않는 이상,
다른 프로세스는 세마포어 변수를 -1 할때 이미 세마포어 변수가 0이기 때문에 +1이 될때까지
방지된다. 섹션에서 다시 세마포어 변수의 값이 0에 +1 되면 방지되고 있던 다른 프로세스는
다시 행동을 재개하게 되고 이 프로세스 역시 -1하여 0이 된다.
쉽게 말하자면, 세마포어 변수를 사용하여 동기화를 유지하려 하는 두 프로세스가 있다면,
한 프로세스가 세마포어 변수를 감소하고 특정섹션에 돌입하면 세마포어변수를 감소하려던
다른 프로세스는 방지된다는 것이다. 섹션에 돌입해 있던 프로세스가 세마포어변수를 증가하면
다른 프로세스는 실행이 다시 재게되게 된다. 즉, 특정 리소스를 액세스하려던 여러 프로세스가
있다면, 그 프로세스들은 세마포어를 증가하고 감소함으로써 동시에 액세스 되지 않고 한
프로세스만이 리소스를 액세스 할수 있는 것이다.

▶ semget
#include <sys/sem.h>

int semget(key_t key, int num_sems, int sem_flags);

semget 함수는 세마포어를 생성하고 세마포어 기술자를 반환한다. key는 관련없는 프로세스가
같은 IPC객체를 액세스하게 해주는데 사용되는 정수값이다. num_sems는 생성하려는 세마포어
수이다. 거의다 1이다.
sem_flags는 세마포어에 대한 허가권과 OR 연산을 통해 결합될수 있는 IPC_CREAT이다.
IPC_CREAT는 세마포어를 새로 생성할때 쓰며 key에 관련있는 프로세스가 이미 세마포어를 생성
했으면, 이 플래그는 무시되고 이미 생성되어 있는 세마포어에 대한 기술자를 반환한다.

semget 함수는 성공하면 생성된 세마포어에 대한 식별자를 반환하고, 실패하면 -1을 반환한다.

▶ semop
#include <sys/sem.h>

int semop(int sem_id, struct sembuf *sem_ops, size_t num_sem_ops);

semop은 세마포어의 값을 변경하기 위해 사용한다. sem_id는 semget으로 반환된 세마포어
기술자이다. sem_ops는 세마포어를 변경하기 위한 값이 담겨있는 sembuf 구조체의 배열에 대한
포인터이다.

struct sembuf {
 short sem_num;
 short sem_op;
 short sem_flg;
}

sem_num은 세마포어 번호이고, sem_op은 세마포어의 값을 변경시키기 위한 기준값이다. 바이너리
세마포어라면 -1이나 +1이 될수있다. sem_flg는 일반적으로 SEM_UNDO로 설정되는데 SEM_UNDO는
세마포어에 가해지는 변경을 관리하고, 프로세스가 세마포어를 제거하지 않고 끝내더라도 자동해제
하게 해준다.

▶ semctl
#include <sys/sem.h>

int semctl(int sem_id, int sem_num, int command, ...);

semctl함수는 세마포어에 대해 직접 제어하게 해준다. sem_id는 세마포어 식별자이고 sem_num은
세마포어 번호이다. command는 세마포어에 대해 수행할 동작이고 네번째 파라미터는 세마포어를
제어할때 필요한 값을 갖고 있는 공용체 semun이다. 다음은 최소한의 멤버를 가지는 semun이다.

union semun {
 int val;
 struct semid_ds *buf;
 unsigned short *array;
}

command의 종류는 다음과 같다.

IPC_STAT : 현재 세마포어의 상태를 네번째 파라미터에 기록한다.
IPC_SET : 세마포어에 대한 허가정보를 semid_ds 구조체에 대한 포인터인 buf의 내용으로 변환한다.
SETVAL : 세마포어를 네번째 파라미터의 val 멤버의 값으로 초기화한다.
IPC_RMID : 세마포어를 삭제한다.

2. 공유메모리
공유메모리는 서로 관련 없는 두 프로세스가 같은 메모리를 액세스 하게 해준다. 공유메모리는
물리메모리에 생성되고 프로세스들의 자체적인 논리 메모리로 연결되게 된다. 공유메모리를 사용하는
프로세스들은 같은 메모리 세그먼트를 공유할수 있고, 한 프로세스에서 공유메모리에 가해지는
변경은 다른 프로세스에도 반영된다. 공유메모리는 많은 장점을 제공하지만 동기화 특징을 제공하지
않으므로 프로그래머가 직접 동기화 특징을 구현해야 할것이다.

▶ shmget
#include <sys/shm.h>

int shmget(key_t key, size_t size, int shmflg);

shmget 함수는 공유메모리를 생성하게 해준다. key는 다른 프로세스에서도 같은 공유메모리
세그먼트를 사용하기 위해 사용하는 정수값이고, size는 공유메모리 세그먼트의 크기이다.
shmflg는 메모리에 대한 허가권플래그 이고, IPC_CREAT플래그와 비트 OR연산을 통해 결합될수 있다.
semget와마찬가지로 IPC_CREAT플래그를 이용하여 아직 key와 관련된 공유메모리가 생성되지
않았다면 생성한다. 이미 생성되어 있다면 IPC_CREAT는 무시되고 기존의 공유메모리에 대한
기술자를 반환한다.

shmget은 성공적으로 실행됬다면 생성된 공유메모리에 대한 기술자를 반환하고, 실패할 경우에는
-1을 반환한다.

▶ shmat
#include <sys/shm.h>

void *shmat(int shm_id, const void *shm_addr, int shmflg);

shmat 함수는 물리메모리에 생성되어 있는 공유메모리를 프로세스의 논리메모리에 연결시켜 준다.
이것은 꼭 필요한 작업이며 공유메모리를 사용하기 위해서는 필수이다. shm_id는 공유메모리
기술자이고 shm_addr은 공유메모리가 연결될 프로세스의 논리 메모리의 주소이다. 메모리 주소를
직접 지정해 주는것은 하드웨어에 매우 의존적이므로, 시스템이 자동으로 선택해 줄수 있도록
0으로 해주는것이 좋다. shmflg는 비트 플래그의 모음으로써, shm_addr과 함꼐 공유 메모리가
연결되는 어드레스를 제어하는 SHM_RND와 연결된 메모리를 읽기 전용으로 만드는 SHM_RDONLY가
있다.

shmat는 성공적으로 실행됬다면 공유메모리가 연결된 프로세스의 논리 메모리의 주소를 반환하고
실패했다면 -1를 반환한다.

▶ shmdt
#include <sys/shm.h>

int shmdt(const void *shm_addr);

shmdt는 현재 프로세스로부터 shm_addr에 지정된 논리 메모리(공유메모리)를 제거한다. 즉,
공유메모리 자체를 삭제하는것이 아니라 물리메모리에 생성된 공유메모리와 연결되있는
현재 프로세스의 논리 메모리를 무효하게 만든다.
shmdt는 성공하면 0을 반환하고 실패하면 -1를 반환한다.

▶ shmctl
int shmctl(int shm_id, int command, struct shmid_ds *buf);

shmctl은 공유메모리에 대해 직접 액세스 할수있게 해준다. shm_id는 공유메모리 식별자이고
command는 수행할 동작이다. 그리고 buf는 shmid_ds구조체에 대한 포인터로써 공유메모리를
위한 모드와 허용권한을 갖는다. shmid_ds는 다음과 같다.

struct shmid_ds {
 uid_t shm_perm.uid;
 uid_t shm_perm.gid;
 mode_t shm_perm.mode;
}

command의 종류는 다음과 같다.

IPC_STAT : 공유 메모리와 관련된 값을 반영하기 위해 shmid_ds 구조체에서 데이터를 설정한다.
IPC_SET : 프로세스가 허용 권한을 가진다면 공유 메모리와 관련된 값을 shmid_ds 데이터
          구조에서 제공되는 것으로 설정한다.
IPC_RMID : 공유 메모리 세그먼트를 삭제한다.

만약, shmdt를 이용해서 현재 프로세스로 부터 공유메모리를 제거 하지 않고 IPC_RMID 플래그로
공유메모리를 삭제하려 한다면, 마지막 프로세스로 부터 연결 해제될 때까지 계속해서 동작할
것이다.

shmctl는 성공하면 0을 반환하고, 실패하면 -1를 반환한다.

3. 메시지 큐
메시지 큐는 명명파이프와 비슷하지만 파이프작업보다 단순하고 동기화와 방지 문제를 거의
대부분 방지할수 있다. 메시지 큐는 각 데이터 블록에 부과되는 최대크기 제한인 MSGMSX와
큐의 최대크기 제한인 MSGMNB에 의해 제한 받을수 있다.

▶ msgget
#include <sys/msg.h>

int msgget(key_t key, int msgflg);

key는 관련없는 프로세스가 같은 메시지큐를 사용하기위해 사용되는 정수형태의 값이고, msgflg는
메시지큐에대한 허가권이며, 메시지큐를 새로 생성하게 해주는 IPC_CREAT 플래그와 OR 연산을 통해
결합될수 있다.

msgget 함수는 성공하면 메시지큐에 대한 기술자를 반환하고, 실패하면 -1를 반환한다.

▶ msgsnd
#include <sys/msg.h>

int msgsnd(int msqid, void *msg_ptr, size_t msg_sz, int msgflg);

msgsnd는 메시지큐에 메시지를 추가하게 해준다. msqid는 메시지큐 식별자이며 msg_ptr은 추가할
메시지에 대한 포인터 이다. 이 메시지는 꼭 long int 형의 메시지 타입을 가르키는 변수로 시작해야
한다. 다음과 같이 말이다.

struct my_message {
 long int message_type;
 /* 전송하기 원하는 데이터 */
}

msg_sz는 long int형의 메시지타입 변수를 제외한 메시지의 크기이고, msgflg는 메시지큐가 가득
차거나 큐에 저장되는 메시지에 대한 시스템 범위의 제한에 도달했을때 발생하는것을 제어한다.
msgflg에는 IPC_NOWAIT가 들어갈수 있는데 IPC_NOWAIT는 큐의 공간이 유효할때까지 기다리지 않고
즉시 반환하게 한다.

msgsnd는 성공하면 0을 반환하고, 실패하면 -1를 반환한다.

▶ msgrcv
#include <sys/msg.h>

int msgrcv(int msqid, void *msg_ptr, size_t msg_sz, long int msgtype, int msgflg);

msgrcv 함수는 메시지큐로부터 메시지를 구한다.
msqid는 메시지큐 식별자이고 msg_ptr은 메시지큐로부터 구한 메시지를 받을 변수에 대한
포인터이다. msg_sz는 long int형 메시지타입변수의 크기를 제외한 받을 메시지 크기이고
msgtype은 메시지큐에서 받아 들일 메시지의 타입이다. 다시말해, msgtype이 1이면 큐에서
메시지의 타입이 1인 처음의 메시지를 구한다. 특정 메시지를 구하고 하면 그 메시지는 큐로부터
제거 된다. msgtype이 0이면 큐에서 유효한 메시지부터 차례로받아 들인다. msgflg는 IPC_NOWAIT
값을 갖을수 있고, 이 플래그가 설정된다면 메시지가 전달될수 있을때까지 기다리지 않고 즉시
반환할것이다.

msgrcv 함수는 성공하면 버퍼에 저장된 바이트 수를 반환하고, 실패하면 -1를 반환한다.

▶ msgctl
#include <sys/msg.h>

int msgctl(int msqid, int command, struct msqid_ds *buf);

msgctl은 메시지큐를 직접 제어할수 있게 해준다. msqid는 메시지큐 식별자이고, command는
수행할 동작이다. msqid_ds 구조체에대한 포인터인 buf는 다음의 멤버를 가진다.

struct msqid_ds {
 uid_t msg_perm.uid;
 uid_t msg_perm.gid;
 mode_t msg_perm.mode;
}

command의 종류는 다음과 같다.

IPC_STAT : 메시지 큐와 관련된 값을 반영하기 위해 MSQID_DS 구조체에서 데이터를 설정한다.
IPC_SET : 프로세스가 허용 권한을 가진다면 메시지 큐와 관련되는 값을 msqid_ds 데이터
          구조체에서 제공되는 것으로 설정된다.
IPC_RMID : 메시지 큐를 삭제한다.

msgctl함수는 성공하면 0을 반환하고, 실패하면 -1를 반환한다.


4. IPC 관련 명령어
ipcs {-s | -m | -q} : 세마포어, 공유메모리, 메시지큐 상태보기
ipcrm {sem | shm | msg} id : 세마포어, 공유메모리, 메시지큐 삭제하기

/***********************************************************************************************/
8단계 - 개발도구(gcc, make, gdb)

1. GCC
GCC는 GNU(Gnu is Not Unix)으로 인해 개발된 리눅스/유닉스 환경에서 사용하는 컴파일러
이다. 기능도 좋고 사용하기 편할뿐만 아니라, 공짜여서 리눅스/유닉스 에서 가장 많이
사용되는 컴파일러이다.

- 오브젝트 파일 생성하기
먼저 오브젝트 파일을 생성할때 사용하는 옵션을 알아보자. 오브젝트 파일을 생성할때는
-c 옵션을 사용한다.

$ gcc -c [srcfile]

srcfile은 복수가 될수 있다. 소스파일이 여러개라면 각각의 소스파일에 대한 오브젝트
파일을 생성한다. 예를 들어보자.

$ gcc -c hello.c hello2.c
$ ls *.o
hello.c hello.o hello2.c hello2.o

- 실행파일 생성하기
실행파일을 생성할때는 두가지 방법을 사용할수 있다. 아무런 옵션없이 gcc를 실행시키는 것과
-o을 사용하는 것이다. 아무런 옵션없이 사용하는 거라면

$ gcc [srcfile]

이렇게 사용하면 된다. gcc는 srcfile을 컴파일하고 링크하여 a.out 라는 실행파일을 생성한다.
-o 옵션은 방금전 처럼 실행파일을 생성하지만 생성할 실행파일 이름을 지정해 줄수 있다.

$ gcc -o hello hello.c 혹은
$ gcc hello.c -o hello
$ ./hello
Hello, World!

소스파일 이름에는 여러개가 올수있으며, 오브젝트파일도 된다.

- l 옵션과 L 옵션
l옵션과 L옵션은 라이브러리와 관계된 옵션이다. -l 옵션은 링크할 라이브러리 명을 지정해주는
옵션이다. 예를 들어, 다음과 같이 한다면

$ gcc -o hello hello.c -lmylib

libmylib.a 라이브러리를 링크과정에서 hello.o와 링크시켜준다. 하지만 위의 명령은 실패할것이다.
-L 옵션은 라이브러리를 찾을 위치를 지정해주는 옵션이다. 방금전의 명령이 실패할것이라고
했는데, 왜냐하면 libmylib.a 는 현재 디렉토리에 있는데 gcc가 표준 라이브러리파일 디렉토리에서
찾으려고 하고 때문이다. 이때 우리는 -L 옵션을 사용함으로써 라이브러리를 찾을수 있다.

$ gcc -o hello hello.c -lmylib -L.

현재 디렉토리(.)에서 라이브러리를 찾게 하였다.

2. make
make는 복수의 소스파일, 오브젝트파일을 컴파일-링크 할때 쓰는 개발도구이다. make가 실행될때는
현재 디렉토리에서 Makefile 또는 makefile 이라는 파일을 읽어 들인다. 이 파일에는 make에서
인식되는 애플리케이션의 구성을 나타내는 내용을 갖고있다. Makefile이나 makefile이라는 이름이
아니라 다른 이름이면 make -f [filename] 으로 사용할수 있다.

Makefile의 예를 보자.
--------------------------------------------------
hello: main.o hello.o
 gcc -o hello hello.c

main.o: main.c
 gcc -c main.c

hello.o: hello.c myfunc.h
 gcc -c hello.c
--------------------------------------------------
분석을 해보자. 왼쪽부분에 있는 hello, main.o, hello.o 는 대상의 이름이고 : 옆에 있는것은
그 대상을 만들기 위해 의존하는 파일목록이다. hello는 main.o와 hello.o에게 의존한다. 이것이
생성되어 있지 않다면 main.o 부분으로 간다. main.o는 또 main.c에게 의존한다. 만약 main.c가
생성되어 있으면 gcc -c main.c를 이용하여 main.o를 생성한다. 다시 hello의 의존을 보면
hello.o가 있는데 hello.o가 생성되어있지 않다면 이번 역시 hello.o로 옴겨가서 의존성을
검사하고 그밑에 있는 명령을 실행한다. 마치 복잡한 사슬같다. 실행 해보자.

bash-2.05a$ make
gcc -c main.c
gcc -c hello.c
gcc -o hello hello.c

성공적으로 hello를 생성하는것을 볼수있다.

makefile에도 주석문이 있는데 # 를 앞에 사용함으로써 주석으로 만들수 있다.
애플리케이션을 효율적으로 구성할려면 매크로 라는것을 이용해야 한다. 매크로는 변수와
비슷한 개념인데 생성하는법은 "변수의이름 = 값" 형태로 생성하고 사용할때는 $(변수의이름)
으로 사용하면된다. make 자체가 제공하는 매크로가 있는데 그것은 다음과 같다.

$? - 현재 대상보다 최근에 변경된 필수 조건의 목록
$@ - 현재 대상의 이름
$< - 현재 필수 조건의 이름
$* - 확장자를 제외하고 현재 필수 조건의 이름

진보된 makefile을 보자.
---------------------------------------------------
all: hello

# 컴파일러
CC = gcc

# 설치 위치
INSTDIR = /usr/local/bin

# 헤더파일 위치
INCLUDE = .

hello: main.o hello.o
 $(CC) -o hello hello.c -I$(INCLUDE)

main.o: main.c
 $(CC) -c main.c -I($INCLUDE)

hello.o: hello.c myfunc.h
 $(CC) -c hello.c -I($INCLUDE)
clear:
 -rm main.o hello.o

install: hello
 @cp hello $(INSTDIR);\
 @chmod 755 $(INSTDIR);\
 @echo "Installed in $(INSTDIR)";
---------------------------------------------------
all은 지시된 대상이 없으면 기본적으로 실행할 대상 목록을 갖고있다. 여기서는 CC, INSTDIR 등의
매크로를 사용하였다. 매크로는 $() 으로 사용하였으며 각 대상의 명령에서 사용하였다. 이렇게
매크로를 사용하는것은 많은 Makefile에서 자주 볼수있다. 2개의 대상이 더 추가되었는데 clear과
install이다. clear는 오브젝트 파일을 지우고 install는 INSTDIR에 지정된 디렉토리에 hello를
설치한다. 이 두개의 대상도 역시 많은 Makefile에서 볼수있을것이다. 특정 대상만을 실행하기
위해서는 make 대상의이름 하면된다.

마지막으로, 내장규칙을 알아보자. Make는 메이크파일을 단순화 시키기위한 내장규칙을 제공한다.
내장규칙중에 오브젝트를 생성하는 것이있는데, 그것은 다음과 같다.

%.o: %.c
#  commands to execute (built-in):
        $(COMPILE.c) $(OUTPUT_OPTION) $<

우리는 이 내장규칙을 이용하여 구지 명령을 안적어 줘도 .o 파일을 .c으로 간편하게 만들수있다.

3. gdb
gdb는 Gnu DeBugger 의 약자로 프로그램의 버그를 고칠때 쓰는 디버거이다. gdb로 디버깅 하기
위해서는 디버깅할려는 소스를 gcc 로 -g옵션과 함께 컴파일 해야한다.

$ gcc -g -o hello hello.c
$ gdb hello

- run
run 명령은 프로그램을 실행한다. run의 인수는 프로그램의 인수로 전달된다.

- backtrace(bt)
이 위치까지의 진행과정을 보여준다.

- print expr
수식의 값을 보여준다(변수, 수식).

- list
프로그램의 C 소스코드를 보여준다.

- break [file:]function
function 또는 특정 주소에 정지점을 설정한다. 프로그램 실행후 이부분에 도착하면 정지된다.
여러개의 break가 가능하다.

- continue(c)
정지점등에서 정지한 프로그램을 계속 실행한다.

- step
다음행을 수행한다. 그 행에서 수행되는 함수를 수행한다.

- next
다음행을 수행한다. 그 행에서 수행되는 함수를 수행하지 않고 건너뛴다.

- disassemble [function]
function 함수의 어셈블리 코드를 출력한다.

- help [name]
name에 관환 도움말을 보여준다.

- quit
GDB를 종료한다.
/***********************************************************************************************/9단계 - 소켓

1. 소켓이란 무엇인가?
소켓은 한 시스템이나 네트워크 상에서 통신을 가능케 해주는 통신 인터페이스이다.
소켓은 버클리 유닉스 버전에 의해 소개되었다. 소켓을 사용하면 운영체제의 종류에
관계 없이 서버/클라이언트 환경을 구축할수있다.

2. 소켓 사용하기
소켓을 사용하기 위해서는 소켓 어드레스 정보가 담긴 구조체를 사용해야 한다.
로컬 시스템에서 사용하기위한 소켓은 sys/un.h 에 정의된 sockaddr_un 을 사용해야
한다.

struct sockaddr_un {
 sa_family_t sun_family; /* 소켓 도메인(AF_UNIX) */
 char  sun_path[]; /* 어드레스 파일 경로   */
};

네트워크에서 사용하기 위한 소켓은 netinet/in.h 의 sockaddr_in 을 사용한다.

struct sockaddr_in {
 short int          sin_family;  /* 소켓 도메인(AF_INET) */
 unsigned short int sin_port;    /* 포트 번호            */
 struct in_addr     sin_addr;    /* 인터넷 주소(IP)      */
 unsigned char      sin_zero[8]; /* sockaddr를 위한 변수 */
};

마지막의 sin_zero 는 실제적으로 데이터를 보내는데 사용되는 데이터 타입인
sockaddr 구조체와 크기를 같게하기 위한 변수이다. 이것은 0으로 채워야 한다.

▶ socket() - 소켓 생성
#include <sys/types.h>
#include <sys/socket.h>

int socket(int domain, int type, int protocol);

domain은 소켓 도메인(소켓종류)인데 AF_UNIX 나 AF_INET 이 될수있다. type 은 소켓
타입으로써 TCP를 사용하여 신뢰된 통신을 하기위한 SOCK_STREAM, UDP를 사용하는
SOCK_DGRAM 이 있다. protocol은 기본적으로 0으로 해준다.

socket 함수는 소켓을 생성하여 성공하면 새로운 소켓 기술자를, 실패하면 -1를 반환
한다.

▶ bind() - 소켓 어드레스 할당
#include <sys/socket.h>

int bind(int socket, const struct sockaddr *address, size_t address_len);

bind는 address에 담겨있는 어드레스를 socket 소켓에 할당한다. 인터넷 개념과 함께
말하자면 소켓을 로컬시스템의 포트에 연결하는 작업이다. address_len 은 address의
크기이다. bind는 어드레스를 할당하여 성공하면 0을 반환하고, 실패하면 -1을 반환
하고 errno를 셋팅한다.

▶ listen() - 소켓 큐 생성
#include <sys/socket.h>

int listen(int socket, int backlog);

listen 함수는 소켓을 위한 backlog 크기의 큐를 생성해 준다. 이 큐는 socket 과
관련된 포트에 접속하는 클라이언트들이 대기하는 하며, 후에 accept 를 사용하여
클라이언트와 통신할수 있다.

listen은 큐를 생성하여 성공할경우 0을 반환하고, 실패하면 -1를 반환하고 errno를
셋팅한다.

▶ accept() - 접속 받아들이기
#include <sys/socket.h>

int accept(int socket, struct sockaddr *address, size_t *address_len);

accept 함수는 socket과 관련된 큐에서 대기하고 있는 클라이언트와 통신할수 있도록
새로운 소켓 기술자를 반환한다. 클라이언트의 정보는 address 가 가르키는 sockaddr
구조체에 저장된다. address_len은 address의 길이를 지정한다. 이 accept는 소켓의
큐에 접속되어있는 클라이언트가 없다면, 클라이언트가 접속을 수행할때까지 대기
(방지) 될것이다. 함수는 성공하면 새로운 기술자를 반환하고 실패하면 -1를 반환한다.

▶ connect() - 접속하기
#include <sys/socket.h>

int connect(int socket, const struct sockaddr *address, size_t address_len);

connect 함수는 socket 을 address가 가르키는 주소에 접속 시킨다. address_len은
address의 크기이다. connect로 접속되고 나면 서버/클라이언트 관계가 형성되고
read, write 또는 send, recv 등으로 데이터를 주고 받을수 있다.
connect 함수는 성공하면 0을 반환하고 실패하면 -1를 반환한다.

▶ 소켓 닫기
소켓을 닫기 위해서는 일반 파일 기술자를 닫는 close 함수를 사용하면 된다.
close는 소켓이 전송되지 않는 데이터를 가지거나 아직 접속이 닫혀있지 않은
클라이언트가 있다면 방지된다. 소켓을 닫는 함수에는 shutdown 이라는 함수가 있다.

#include <unistd.h>

int shutdown(int sockfd, int how);

how에는 닫는 방법이 들어간다.

0 - 더이상의 수신 금지
1 - 더이상의 송신 금지
2 - 더이상의 송수신 금지(close()와 같은 경우)

shutdown은 에러가 나면 -1를 반환한다.

▶ 호스트와 네트워크 바이트 순서
소켓을 사용하는 컴퓨터는 여러가지가 있다. 그 시스템 중에는 메모리에 1-2-3-4
순으로 저장하는 시스템이 있지만, 4-3-2-1 방식으로 저장하는 시스템이 있다. 서버와
클라이언와 통신을 하기위해서는 서버의 같은 포트를 사용하여 통신을 해야 하는데
서버와 클라이언트의 바이트 순서가 달르게 되면 서버 소켓에서는 1574가 주어지지만
클라이언트에서 1574 포트를 접속하려할때 바이트 순서가 달라 9734 포트로 접속
할수도 있다. 이런 사태를 방지하기 위해 소켓에서는 네트워크 바이트 순서와 호스트
바이트 순서를 서로 변환 시킬수있는 함수를 지원한다. 다음은 변환 함수들이다

#include <netinet/in.h>

unsigned long int htonl(unsigned long int hostlong);
unsigned short int htons(unsigned short int hostshort);
unsigned long int ntohl(unsigned long int netlong);
unsigned short int ntohs(unsigned short int netshort);

함수는 함수이름 그대로 해석하면 된다

htons()--"Host to Network Short"
htonl()--"Host to Network Long"
ntohs()--"Network to Host Short"
ntohl()--"Network to Host Long"

서버에 접속하거나 대기하려 할때는 sockaddr_in 구조체의 주소 멤버에 htonl로
호스트 바이트 순서에서 네트워크 바이트 순서로 바꾼 주소값을 넣고, sin_port에는
htons로 변환한 포트 값을 넣으면 될것이다. 또, 네트워크 순서로 변환되어져 있는
값은 ntohs나 ntohl 로 호스트 바이트 순서로 변환하면 될것이다.

▶ 네트워크 정보(IP, 포트, 서비스)
점으로 구성된 아이피를 호스트/네트워크 바이트 순서로 바꾸기 위해서 다음 함수를
사용한다.

#include <arpa/inet.h>

unsigned long inet_addr(const char *cp);
char *inet_ntoa(struct in_addr in);

inet_addr 함수는 점으로 이루어진 아이피 문자열을 unsigned long(NBO)로 변환
해준다. inet_ntoa 함수는 그 반대로 NBO로 이루어진 아이피를 아스키 형식의 문자열로
해준다. 

IP 어드레스에 대한 정보를 알기 위해서는 다음과 같은 함수를 사용한다.

#include <netdb.h>

struct hostent *gethostbyaddr(const void *addr, size_t len, int type);
struct hostent *gethostbyname(const char *name);

위 두 함수로 부터 반환되는 hostent 구조체는 다음과 같다.

struct hostent {
 char *h_name;  /* 호스트의 공식적인 이름    */
 char **h_aliases; /* 호스트의 별명으로서 NULL 로 끝맺음된다 */
 int h_addrtype;  /* 주소의 종류, 보통 AF_INET */
 int h_length;  /* 주소의 바이트 수          */
 char **h_addr_list; /* 0으로 끝나는 네트워크 주소들, NBO 구성 */
};

#define h_addr  h_addr_list[0] /* h_addr_list 속의 첫번째 주소 */

로컬 시스템의 호스트 네임을 알아보기 위해서는 gethostname 함수를 사용한다.

#include <unistd.h>

int gethostname(char *name, int namelength);

gethostname은 namelength 길이의 호스트 네임을 name이 가르키는 공간에 넣는다.
성공하면 0을 반환하고, 실패하면 -1를 반환한다.

때로는 몇가지 서비스에 대한 정보를 알아보아야 할때도 있을 것이다.

#include <netdb.h>

struct servent *getservbyname(const char *name, const char *proto);
struct servent *getsevbyport(int port, const char *proto);

proto는 SOCK_STREAM 를 위한 tcp나 SOCK_DGRAM 을 위한 udp가 될수있다. 두번째
함수의 port 는 NBO이어야 한다. 두 함수에서 반환되는 정보를 갖는 servent
구조체는 다음 멤버를 가진다.

struct servent {
 char *s_name;  /* 서비스 이름 */
 char **s_aliases; /* 별칭의 목록 (선택적인 이름) */
 int s_port;  /* IP 포트 번호 */
 char *s_proto;  /* 일반적으로 "tcp"나 "udp"인 서비스 형태 */
};

▶ select() - 동시에 파일 기술자 검사하기
select 함수는 동시에 여러개의 파일 기술자를 읽기, 쓰기 행동이 있는지 알아볼수
있다. 또, 그 파일 기술자에서 읽을수 잇는 데이터나 쓸 데이터가 있을때까지
프로그램이 방지 되게 해준다.

#include <sys/types.h>
#include <sys/time.h>

int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *errorfds,
 struct timeval *timeout);

nfds는 테스트할 파일기술자의 숫자인데, 보통 테스트할 최대 파일 기술자 +1 이다.
readfds 는 읽을 데이터가 있는지 테스트할 파일기술자 모음이고, writefds 는
쓸수 있는지, errrorfds는 에러조건을 가지는지 테스트할 파일 기술자 모음
이다. 그리고 마지막 timeout는 timeval 구조체에 대한 포인터 인데, select는
이 timeval 시간 만큼 파일 기술자에 대해 어떠한 행동이 이루어 질때까지 기다릴
것이다. select 함수는 파일 기술자 모음에 있는 파일 기술자중에 어떠한 기술자가
읽기나, 쓰기나, 에러를 가진다면 그 기술자가 변경되었음을 가르키도록 변경하고
리턴한다. 성공하면 파일기술자 모음의 전체 갯수를 반환하고 실패하면 -1를 반환한다.
또, timeout 동안 기달려도 파일기술자들에게 아무 반응이 없다면 0을 반환한다.

timeval 구조체는 다음 멤버를 가진다.

#include <sys/types.h>

struct timeval {
 time_t tv_sec;  /* 초 단위 */
 long tv_usec; /* 밀리 초 단위 */
};

파일 기술자 모음에 파일기술자를 추가하거나 지우거나 반응이 있는지 검사하기 위해
다음 매크로들을 사용한다.

#include <sys/types.h>
#include <sys/time.h>

void FD_ZERO(fd_set *fdset);  /* 파일 기술자 모음을 0으로 초기화 한다  */
void FD_CLR(int fd, fd_set *fdset);  /* fdset 파일기술자 모음에서 fd를 지운다 */
void FD_SET(int fd, fd_set *fdset);  /* fdset 파일기술자 모음에 fd를 추가한다 */
int FD_ISSET(int fd, fd_set *fdset);  /* fd가 fdset 파일기술자 모음의 요소라면
     0이 아닌값을 반환한다 */

파일기술자가 읽기/쓰기/에러 의 하나에 반응이 있었는지 알아 볼려면 FD_ISSET을
사용하여 해당 파일기술자가 반응이 잇엇는지 체크하면 된다. 반응이 있었다면
FD_ISSET은 1을 반환하고 반응이 없었다면 0을 반환한다.

내 문서는 수학여행이야.. 보고도 남는게 없지.(분위기가 따운됐군 -_-)

__Eof__  /***********************************************************************************************/10단계 - POSIX 스레드(thread)

1. 스레드란?
스레드는 한 프로그램의 여러 실행 흐름이다. 한마디로 프로세스 내의 여러 프로세스라고
생각하면 된다. 이전의 프로세스는 단일 스레드로 이루어 지지만, 스레드를 생성하면
프로그램이 여러 갈래로 갈리고 여러개의 실행 흐름이 생겨난다. 그 덕분에 한 프로그램
안에서 동시에 여러 작업을 할수있다. 스레드들은 한 프로세스에서 파일 기술자, 전역변수,
시그널 핸들러, 현재 디렉토리 상태를 공유하고 자체적인 스택을 가진다. 그리고 스레드는
fork 를 호출하는 것보다 처리속도가 빠르고 적은 메모리를 사용한다. 하지만, 스레드는
많은 부분을 공유하기 때문에 한쓰레드가 잘못된 연산을 했을시에는 전체 쓰레드가 영향을
받을수 있다. OS는 fork 로 생성된 프로세스들을 보호할수있는 보호기능을 갖고 있지만
쓰레드를 보호하는 기능은 없다. 때문에 쓰레드를 사용할 시에는 좀더 주의하여야 한다.

2. 스레드 지원가능 여부
완전한 스레드가 지원되기 시작한것은 POSIX1003.1c 부터이다. 현재의 시스템이 스레드를
지원하는지 알아보기위해서는 limits.h, unistd.h, features.h등의 헤더파일을 살펴보거나 
_POSIX_VERSION 상수가 199506L 이상의 값을 지니고 있는지 확인하는 것이다. 199506L
이상 이어야 완전한 스레드를 지원하지만 그보다 낮어도 약간의 스레드는 지원할것이다.
그리고 _POSIX_THREAD_PRIORITY_SCHEDULING 를 확인해 봄으로써 우선순위 스케줄링을
지원하는지 알아볼수있다.

3. 스레드를 생성하고 종료하기
스레드를 생성하기 위해서는 pthread_create 함수를 사용한다.

#include <pthread.h>

int pthread_create(pthread_t *thread, pthread_attr_t *attr,
 void *(start_routine)(void *), void *arg);

thread 인자는 스레드 식별자를 담을 pthread_t 형 변수에 대한 포인터이다. attr 은
옵션을 말하고 기본적으로 NULL 로 설정할수있다. start_routine은 스레드가 시작하는
함수이다. void * 형의 인자를 받아들이고 void *형을 반환하는 함수여야한다. arg 는
start_routine에 들어갈 인자이다. pthread_create는 스레드를 생성하고 성공적이면 0을,
실패하면 에러 코드를 반환한다.

스레드가 끝날때에는 pthread_exit 함수로 종료시켜야 한다.

#include <pthread.h>

void pthread_exit(void *retval);

pthread_exit 함수는 retval 인자를 자신을 생성한 스레드에 반환하고 스레드를 종료
시킨다. 스레드가 종료될때까지 기다리고 스레드로부터 인자를 돌려받기 위해서는
pthread_join 함수를 사용한다.
 
#include <pthread.h>

int pthread_join(pthread_t th, void **thread_return);

pthread_join 은 th 스레드 기술자를 가진 스레드가 종료될때까지 기다리고 종료되면
thread_return에 리턴값을 돌려받는다. 성공하면 0을 반환하고 실패하면 에러코드를 반환
한다.

스레드를 사용하는 프로그램을 컴파일할려면 -lpthread 옵션과 함께 컴파일 해야한다.

3. 동기화
스레드 사이에는 동기화가 필요한 작업이 있다. 입력 스레드가 입력을 받아야만 출력
스레드가 화면에 출력을 한다던지, 그런 작업 말이다. 세마포어나 뮤텍스를 이용해서
이런 작업을 할수있다.

3.1 세마포어(semaphore)
세마포어는 0과 1값을 감소 시키거나 증가시키며 특정 자원을 특정 스레드만이 접근할수
있도록 한다. 세마포어를 사용하려는 스레드는 세마포어가 1일때는 계속 진행할수 있으며
진입하고나면 세마포어는 0이 된다. 그 결과 세마포어를 사용하려는 다른 스레드는
세마포어가 1이 되야지만 계속 진행할수 있다.

세마포어를 생성하고 초기화하기 위해서는 sem_init 함수를 사용한다.

#include <semaphore.h>

int sem_init(sem_t *sem, int pshared, unsigned int value);

sem은 sem_t 형의 세마포어 변수를 가르키고 pshared는 세마포어의 형태이다. pshared가
0이면 현재 프로세스에서만 사용할수있다. 0이 아니면 다른 프로세스간에도 공유될수 있다.
sem_init는 sem 세마포어를 value 값으로 초기화 하고 성공하면 0을 반환하고 실패하면
-1 를 반환한다.

sem_wait 함수와 sem_post 함수는 세마포어의 값을 제어한다.

#include <semaphore.h>

int sem_wait(sem_t *sem);

int sem_post(sem_t *sem);

sem_wait 는 세마포어의 값을 1 줄이고, sem_post 는 세마포어의 값을 1 늘린다. 두 함수는
모두 조화롭게(간섭받지않게) 실행된다. sem_wait는 세마포어 값이 0이상 이면 1 감소
시키고 계속 실행할것이지만 0이면 1이될때까지 기다린다. 즉, 한 스레드가 sem_wait로
1 감소시키고 특정 부분에 진입하게 되면 sem_wait를 하려던 다른 스레드는 sem_post로
1 증가 될때까지 방지되어 한 스레드만 특정 영역을 실행할수 있는것이다.

sem_destroy 함수로 세마포어를 정리할수 있다.

#include <semaphore.h>

int sem_destroy(sem_t *sem);

세마포어를 파괴하려할때 다른 스레드가 세마포어를 대기중이라면 에러가 발생한다.

3.2 뮤텍스(mutex)
뮤텍스는 스레드 동기화에 사용되는 또다른 방법이다. 뮤텍스는 세마포어와 비슷하지만
뮤텍스는 오로지 한 쓰레드만이 특정 영역을 실행하게 할때 사용될 수 있다. 뮤텍스의
두가지 행동은 잠금(lock)과 해제(unlock)이다. 동기화가 필요한 코드영역에 진입할때
잠그고 빠져나올때 해제한다. 한 뮤텍스가 잠겨있을때 그 뮤텍스를 잠그려는 다른 쓰레드는
방지된다. 그리고 뮤텍스가 해제되면 그 다른 쓰레드가 다시 잠그고 영역에 진입한다.
뮤텍스를 사용하기 위한 함수는 다음과 같다.

#include <pthread.h>

int pthread_mutex_init(pthread_mutex_t *mutex, const pthread_mutexattr_t *mutexattr);

int pthread_mutex_lock(pthread_mutex_t *mutex);

int pthread_mutex_unlock(pthread_mutex_t *mutex);

int pthread_mutex_destroy(pthread_mutex_t *mutex);

pthread_mutex_init 는 뮤텍스를 초기화하고 pthread_mutex_lock는 뮤텍스를 잠그고,
pthread_mutex_unlock 는 뮤텍스를 해제한다. pthread_mutex_destroy 는 뮤텍스를 제거
한다. 실행이 성공하면 0을 반환하고 실패하면 에러코드를 반환한다.

3.3 조건 변수(condition variable)
조건변수는 "시그널 발생"과 "시그널 기다림" 으로 뮤텍스보다 좀더 섬세한 동기화 특징을
제공한다. 특정 영역 진입을 위해 뮤텍스를 해제하고 신호를 기다리다가 신호가 도착하면
뮤텍스를 잠고 다음 코드를 실행한다. 조건변수는 여러가지 상황에서 굉장히 유용하게
사용된다. 한 스레드가 입력을 받고 다른 스레드는 그것을 출력하는 코드가 있다면
프로그램은 뮤텍스를 사용해야 한다. 그러나 뮤텍스로 동기화하려 한다면 새로운 데이터가
입력됬는지, 안됬는지도 모르고 출력하려 할것이다. 이때 조건변수를 써서 출력 스레드는
신호를 기다리게 하고, 입력스레드에서 새로운 입력을 받으면 신호를 보내줘 출력 스레드가
꼭 새로운 데이터를 출력할수 있게끔 할 수 있을 것이다.

조건변수는 pthread_cond_t 타입으로 선언해야 하고 PTHREAD_COND_INITIALIZER
로 초기화 하거나 pthread_cond_init() 함수로 초기화 해야 한다.

pthread_cond_t cond_var = PTHREAD_COND_INITIALIZER;
  OR
pthread_cond_init(&cond_var);

신호을 보내려면 pthread_cond_signal 함수와 pthread_cond_broadcast 함수를 사용한다.

#include <pthread.h>

int pthread_cond_signal(pthread_cond_t *cond);
int pthread_cond_broadcast(pthread_cond_t *cond);

두 함수는 모두 조건변수에 신호를 보낸다. signal 함수는 하나의 스레드만 깨우지만
broadcast 함수는 모든 스레드를 깨운다. 성공하면 0을 리턴한다.

pthread_cond_wait, pthread_cond_timedwait 함수로 신호를 기다릴수 있다.

#include <pthread.h>

int pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t *mutex);
int pthread_cond_timedwait(pthread_cond_t *cond, pthread_mutex_t *mutex,
    const struct timespec *abstime);

mutex 뮤텍스를 해제하고 cond 조건변수에 신호가 도착할때까지 대기한다. 시그널이 도착
하면 뮤텍스를 잠그고 다음 코드를 실행한다. timedwait 는 timespec 형이 지정하는 시간
만큼만 대기한다. abstime 시간동안 시그널이 도착하지 않는다면 ETIMEOUT 에러코드를
반환한다.

pthread_cond_destroy 함수로 조건 변수를 정리 할 수 있다.

#include <pthread.h>

int pthread_cond(pthread_cond_t *cond);

조건변수를 정리한다. 만약 조건변수를 사용하는 쓰레드가 있다면 에러가 발생한다.

4. 스레드 취소하기(KILL)
스레드를 취소하기 위해서는 스레드에게 종료를 요청하는 함수 pthread_cancel 함수를
사용해야 한다.

#include <pthread.h>

int pthread_cancel(pthread_t thread);

이 함수는 thread 쓰레드에게 종료를 요청한다. 종료 요청을 받는 쓰레드에서도 작업이
필요하다.

#include <pthread.h>

int pthread_setcancelstate(int state, int *oldstate);

state는 취소요청을 받아들이면 취할 행동을 지정해준다. PTHREAD_CANCEL_ENABLE 는 취소
요청을 받아 들이고, PTHREAD_CANCEL_DISABLE 는 무시하게 해준다. oldstate 는 이전의
상태를 담는다. 다음으로 취소형태를 지정해 줘야 하는데 다음 함수를 이용한다.

#include <pthread.h>

int pthread_setcanceltype(int type, int *oldtype);

취소형태에는 취소 요청을 즉시 받아들이는 PTHREAD_CANCEL_ASYNCHRONOUS와 스레드가 함수
pthread_join, pthread_cond_wait, pthread_cond_timedwait, pthread_testcancel,
sem_wait, sigwait 의 하나를 실행할때까지 취소 요청을 지연시키는 PTHREAD_CANCEL_DEFERRED
가 있다.

6. 스레드 속성 변경하기
스레드 속성을 이용하면 pthread_join 으로 메인스레드에서 다른 쓰레드를 안기달려도
되게 할수있다. 그리고, 쓰레드의 모드와 스택크기를 조정할수 있다. 스레드 속성 변수를
초기화할때는 pthread_attr_init 함수를 사용한다.

#include <pthread.h>

int pthread_attr_init(pthread_attr_t *attr);

성공할경우 0을, 실패할 경우 에러코드를 반환한다.

스레드 속성을 셋팅하는 함수들은 굉장히 많다. 그중에 몇가지만 살펴보자.

int pthread_attr_setdetachstate(pthread_attr_t *attr, int detachstate);
int pthread_attr_getdetachstate(const pthread_attr_t *attr, int *detachstate);

detachstate는 스레드가 조인해야 할 필요를 없애준다. detachstate 에 플래그를 지정할수
있는데, 두 스레드를 조인하게 해주는 PTHREAD_CREATE_JOINABLE과 조인 하지 못하게 하는
PTHREAD_CREATE_JOINABLE이 있다. 기본적으로는 PTHREAD_CREATE_JOINABLE 이다.

int pthread_attr_setscope(pthread_attr_t *attr, int scope);
int pthread_attr_getscope(const pthread_attr_t *attr, int *scope);

scope는 스레드의 모드를 지정하게 해준다. 유저 모드 PTHREAD_SCOPE_SYSTEM 와 커널 모드
PTHREAD_SCOPE_PROCESS 플래그가 있다. 리눅스는 현재 유저 모드만 지원한다.(확실치않다)

스레드 옵션 변수를 정리하기 할려면 다음 함수를 쓴다.

#include <pthread.h>

int pthread_attr_destroy(pthread_attr *attr);

성공하면 0을 반환하고, 실패하면 에러 코드를 반환한다.


이제야... 모든 문서가 끝났군.. 시스템 프로그래밍 프로젝트 문서 완료 -_-)/

참고 서적: Teach Yourself C, Beginning Linux Programing
참고 문서: The Linux Programer's Guide, www.joinc.co.kr
    Beej's Guide to Network Programming, and so on.

Posted by 행복한 프로그래머 궁금쟁이박
TAG 유닉스

댓글을 달아 주세요

스틱키비트가 걸려있는 대표적인 곳은 /tmp디렉토리 이구요.. 여러 사용자가 같이 사용하는 디렉토리에는 스틱키비트가 필요합니다.

왜냐하면..음~ 이건 디렉토리의 퍼미션에 대한 이해가 있어야하는건데.. 아신다고 생각하고 간단히 말하겠습니다.

예를들어 어떤 계정이던.. 홈 디렉토리를 보면 계정사용자에게 rwx관한이 주어져 있습니다. 그럼 그 디렉토리에 root가 파일을 하나 만들었다고 가정합니다. 퍼미션은 _rw_r__r__ 이렇게요...

퍼미션대로면 root이외에는 지울 수가 없죠..하지만 그 계정의 사용자는 그 파일을 지울 수가 있습니다. 파일을 지우는건 파일보다 디렉토리의 퍼미션이 우선하기 때문입니다.(디렉토리 퍼미션중에 쓰기가 들어가 있기때문)

그렇다면 여러사용자가 공동작업을 하는 디렉토리의 경우..
사용자들이 파일을 작성할 수 있도록 디렉토리의 권한을 만들어줘야 하죠.. 하지만 이렇게 되면 동시에 다른 사용자의 파일도 지울수 있게 되는겁니다.

이럴때 스틱키비트를 걸어주면 파일을 작성할수는 있지만 남의 파일을 지울 수는 없게되는겁니다.

스틱키비트의 설정법은 절대모르방법만 말씀드리겟습니다.
chmod 777 abc --> 이렇게 절대모드로 퍼미션을 줄때 항상 숫자 3자리만 사용했죠..

스틱키비트를 설정할때는 앞에 한자리가 추가됩니다.
chmod 1777 abc 요렇게요..

여기서 제일 앞자리를 계산하는법은,
4는 setuid, 2는 setgid, 1은 sticky bit입니다.
(setuid와 setgid에 대해서는 다른문서를 찾아보세요~~)

마지막으로 퍼미션을 볼때 소문자 t로 되어있는것과 대문자T로 되어있는 경우가 있는데.. t가 보이는 부분이 원래 타인의 실행권한을 보여주는 자리이죠.. 그런데 t가 있어서 실행권한이 있는건지 없는건지 구별을 못하게되죠.. 그래서 소문자 대문자를 쓰는데요..

대문자로 보이는 경우는 실행권한이 없을때구요, 소문자로 보이는 경우는 실행권한이 있을때입니다.

Sticky Bit 다루기
MS-DOS의 램상주 프로그램(TSR)처럼 실행이 종료된 뒤에도 메모리에 계속 남겨두고 다음
실행시에 상대적으로 실행속도를 빠르게 하도록 설정하는 속성을 Sticky bit(스티키비트)
라고 하며 chmod명령으로 설정할 수 있다.

스티키 비트를 설정하려면 rwx처럼 t(sTicky)를 사용할 수있으며 설정되면 가장 오른쪽의
실행 비트가 t로 표시된다.
# ls -al test
-rw-rw-rw- 1 syhwang syhwang 21 Aug 22 20:30 test
# chmod +t test; ls -al test
-rw-rw-rwT 1 syhwang syhwang 21 Aug 22 20:30 test*

실행속성이 없는 파일에 Sticky bit가 설정되면 대문자 T가 오른쪽에 표시되며
실행속성이 있는 파일에 Sticky bit가 설정되면 소문자 t가 표시된다.

# chmod 1775 test
-rw-rw-r-t 1 syhwang syhwang 21 Aug 22 20:30 test*
위의 명령어도 동일한 효과가 나타난다.

또다른 기능
# ls -al test
-rwxr-xr-x 1 root syhwang 21 Aug 22 20:30 test*
# chmod 4755 test
-rwsr-xr-x 1 root syhwang 21 Aug 22 20:30 test*
다음과 같이 설정하는 경우 test를 다른 User가 수행하는 경우에도
Root의 권한으로 수행되도록 한다.
위와 같은 설정은 실행하는 User가 아닌 파일의 Owner의 권한으로 프로그램이
수행되도록 설정하는 것이다.

     



``sticky" 비트 - 이 비트가 디렉토리에 설정되어 있을 때 그 디렉토리내에서 파일의 언링크 (제거) 및 재명명은 파일 소유자, 디렉토리 소유자 또는 루트만이 할 수 있다. 이는 매우 공통된 유닉스의 확장으로 오픈 그룹의 Single Unix Specification 버전 2 에 명시되어 있다. 초기 유닉스 버전들은 이를 ``save program text" 비트라고 불렀으며 이를 메모리에 상주해야 하는 실행가능한 파일을 가리킬 때 사용하였다. 루트만이 이 비트를 설정할 수 있도록 시스템은 보증했는데 그렇지 않다면 사용자들이 억지로 ``모든 것"을 메모리에 올림으로써 시스템을 파손시킬 수 있을 것이다. 리눅스에서 이 비트는 일반 파일에 아무런 영향을 미치지 않으며 일반 사용자는 자신이 소유한 파일에 대해 이 비트를 변경할 수 있다: 리눅스의 가상 메모리 관리 기법은 이러한 비트를 사용해도 아무런 문제가 되지 않게 한다.


문서 성질의 보존 (Save Text Attribute): (디렉토리의 경우)

"스틱키 비트 (sticky bit)"는 디렉토리에 적용될 경우에는 다른 뜻을 가지게 된다. 디렉토리에 스틱키 비트가 붙을 때에는 사용자는 -- 설령 사용자가 디렉토리에 일반적인 쓰기 허가권이 있더라도 -- 소유권이 있거나 확실하게 쓰기 허가권이 허락된 파일 만 지울 수 있게 된다. 이것은 /tmp 따위의 -- 월드-라이타블이면서도 일반 사용자가 무조건 파일을 지우면 좋지 않을 -- 디렉토리 등을 위해 쓰여진다. 스틱키 비트는 긴 디렉토리 리스팅 (ls -l)에서 t로 표시된다.

Posted by 행복한 프로그래머 궁금쟁이박
TAG 리눅스

댓글을 달아 주세요

  1. thxpnp 2008.10.27 01:46  댓글주소  수정/삭제  댓글쓰기

    잘보았습니다. 문제가 안된다면 담아가겠습니다

    문제가 된다면 연락주세요.. 출처는 상단에 표기하겠습니다.

  2. BlogIcon 관리자 2008.10.27 16:03  댓글주소  수정/삭제  댓글쓰기

    헐 주소를 남겨주셔야^^;ㅋㅋ

Linux - lseek

Server/Linux 2007. 10. 26. 10:41

1장. lseek(2)

차례
1.1. 사용법
1.2. 설명
1.3. 반환값
1.4. 에러
1.5. 예제
1.6. 참고문헌

읽기및 쓰기를 위해서 파일의 위치를 재지정


1.1. 사용법

#include <sys/types.h>
#include <unistd.h>

off_t lseek(int fildes, off_t offset, int whence);


1.2. 설명

lseek()는 열린 파일 지정자 fildes로 부터 offset만큼 위치를 변경한다. 위치 변경시 기준점을 정할 수 있는데 whence를 이용해서 지정가능 하다.

SEEK_SET

파일의 처음을 기준으로 offset을 계산한다.

SEEK_CUR

파일의 현재 위치를 기준으로 offset을 계산한다.

SEEK_END

파일의 마지막을 기준으로 offset을 계산한다.

실수로 파일의 마지막을 초과해서 lseek를 사용했을 경우 lseek에서 리턴을 하지는 않지만 write()혹은 read()에서 에러를 발생하게 되므로 주의 해야 한다.

1.3. 반환값

성공했을 경우 파일의 시작으로 부터 떨어진 byte만큼의 offset을 리턴한다. 실패했을 경우 -1을 리턴한다.


1.4. 에러

EBADF

Fildes가 열린 파일 지정자가 아니다.

ESPIPE

Fildes가 파이프, 소켓 혹은 FIFO이다.

EINVAL

Whence가 유효한 값이 아니다.


1.5. 예제

#include <unistd.h>
#include <fcntl.h>
#include <stdio.h>
#include <sys/stat.h>
#include <sys/types.h>

int main(int argc, char **argv)
{
int fd;
int i, buf;
fd = open("num.dat", O_RDWR|O_CREAT);
if (fd < 0)
{
perror("error : ");
exit(0);
}
for (i = 1000; i < 1010; i++)
{
write(fd, (void *)&i, sizeof(i));
}
// 파일의 처음으로 이동한 다음 데이터를 읽는다.
lseek(fd, 0, SEEK_SET);
read(fd, (void *)&buf, sizeof(i));
printf("%d\n", buf);

// 파일의 처음이로 이동한 다음 4번째 입력된 숫자를
// 읽는다.
lseek(fd, 4*sizeof(i), SEEK_SET);
read(fd, (void *)&buf, sizeof(i));
printf("%d\n", buf);
}


큰 파일(2GBytes 이상)을 다루고자 해야 하는 문제에 봉착하는 분들을 위해서 LFS를 참고자료로 다루었으면 좋겠습니다. [http]LFS 참고링크 - minzkn
  • 요약하면 컴파일 옵션에 "-D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE"을 주고 open/creat 함수에서 O_LARGEFILE을 사용하고 off_t 의 확장에 대한 고려등에 대해서 다루어졌으면 합니다.
  • 오늘 집에가서 관련 내용을 살펴보고 테스트 후 문서를 업데이트 시키도록 하겠습니다. 재미있을 것 같군요 :-) 좋은 정보 감사합니다. -yundream
Posted by 행복한 프로그래머 궁금쟁이박
TAG 리눅스

댓글을 달아 주세요

※open()함수원형
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h> 

일반적인 경우

 int open(const char *pathname, int flags);

파일을 새로 생성시

 int open(const char *pathname, int flags, mode_t mode);


※ open()의 flags 인자와 관련된 권한 옵션들

옵션

내용

O_RDONLY

 읽기 전용으로 파일을 연다.(r)

O_WRONLY

 쓰기 전용으로 파일을 연다.(w)

O_RDWR

 읽고 쓰기 모두 가능(r+, w+)


※ open()의 flags 인자와 관련된 부가적 옵션들

옵션

내용

O_CREAT

 만약 pathname에 해당하는 파일이 없을 경우 파일을 생성. 이경우 3번째 인자를 참조하게 되는데, 세번째 인자에서 지정해 주는 것은 생성할 파일의 권한(permission)이다.

O_EXCL

 O_CREAT와 같이 사용하여 만약 pathname에 해당하는 파일이 존재할 경우 에러를 발생시킨다. 파일을 열지는 않는다.

O_TRUNC

 pathname에 해당하는 파일이 존재하며 쓰기모드(O_WRONLY나 O_RDWR)로 열 경우 파일의 길이를 0으로 만든다. 즉 모든 내용을 지우는 것이다.
 다만 파일이 일반적인 파일일 경우 동작하게 된다.
FIFO나 장치파일일 경우 이 옵션은 무시된다.

O_APPEND

 파일의 쓰기를 할 때 항상 파일의 끝에서 부터 쓰게 한다.(a)
 파일에 저장할 내용을 항상 덧붙여서 쓸때 이 옵션을 설정해 주면 된다.

O_SYNC

 파일에 데이터를 쓸때마다 물리적인 디스크에도 동일하게 적용시킨다.
 이 옵션은 POSIX 표준이 아니므로 지원하지 않는 시스템이 있을것이다.

O_NDELAY

 지연하지 말고 바로 실행시켜라.(FIFO에서 사용)

O_NOCTTY

 이 터미널을 제어터미널로 사용하지 않는다.


※ open()함수에서 mode인자들의 옵션들

옵션

의미

S_IRWXU

파일의 소유주(user)에게 r,w,x 권한 설정

S_IRUSR

파일의 소유주(user)에게 r 권한 설정

S_IWUSR

파일의 소유주(user)에게 w 권한 설정

S_IXUSR

파일의 소유주(user)에게 x 권한 설정

S_IRWXG

파일 그룹(group)에게 r, w, x 권한 설정

S_IRGRP

파일 그룹(group)에게 r 권한 설정

S_IWGRP

파일 그룹(group)에게 w 권한 설정

S_IXGRP

파일 그룹(group)에게 x 권한 설정

S_IRWXO

다른 사용자(other)에게 r, w, x 권한 설정

S_ROTH

다른 사용자(other)에게 r 권한 설정

S_WOTH

다른 사용자(other)에게 w 권한 설정

S_XOTH

다른 사용자(other)에게 x 권한 설정


Posted by 행복한 프로그래머 궁금쟁이박
TAG 리눅스

댓글을 달아 주세요

Linux - stat()

Server/Linux 2007. 10. 26. 10:40

1장. stat(2)

차례
1.1. 사용법
1.2. 설명
1.3. 반환값
1.4. 에러
1.5. 예제

파일의 상태를 얻어온다.


1.1. 사용법

#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
int stat(const char *file_name, struct stat *buf);
int fstat(int filedes, struct stat *buf);
int lstat(const char *file_name, struct stat *buf);		


1.2. 설명

stat() 함수를 이용하면 파일의 상태를 알아올수 있다. 첫번째 인자로 주어진 file_name 의 상태를 얻어와서 두번째 인자인 buf 에 채워 넣는다.

lstat() 함수는 심볼릭 링크파일의 원본파일의 상태를 얻어온다는 것을 제외하고는 stat() 함수와 동일하다.

fstat() 는 open(2) 등을 통해서 만들어진 파일지시자를 인자로 받아들인다는 점 외에는 stat() 와 동일한 일을 수행한다.

이들 함수는 성공적으로 수행될경우 파일의 정보를 stat구조체에 복사한다. stat구조체는 다음과 같이 정의되어 있다.


struct stat
{   
 dev_t         st_dev;      /* device */   
 ino_t         st_ino;      /* inode */   
 mode_t        st_mode;     /* protection */   
 nlink_t       st_nlink;    /* number of hard links */   
 uid_t         st_uid;      /* user ID of owner */   
 gid_t         st_gid;      /* group ID of owner */  
 dev_t         st_rdev;     /* device type (if inode device) */   
 off_t         st_size;     /* total size, in bytes */   
 blksize_t     st_blksize;  /* blocksize for filesystem I/O */   
 blkcnt_t      st_blocks;   /* number of blocks allocated */   
 time_t        st_atime;    /* time of last access */   
 time_t        st_mtime;    /* time of last modification */   
 time_t        st_ctime;    /* time of last change */
};  


1.3. 반환값

성공할경우 0을 실패했을경우에는 -1을 반환하며, 적당한 errno 값을 설정한다.


1.4. 에러

EBADF

잘못된 파일 지정자

ENOENT

파일이름을 찾기 위한 경로의 구성요수중 존재하지 않는 경로가 있을 경우

EACCESST

읽기 권한이 없다.

ENOTDIR

구성요소중 디렉토리가 아닌게 있다.


1.5. 예제

#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <stdio.h>
#include <pwd.h>
#include <grp.h>

int main(int argc, char **argv)
{   
 int return_stat;
 char *file_name;
 struct stat file_info;
 struct passwd *my_passwd;
 struct group  *my_group;
 mode_t file_mode;
 
 if (argc != 2 )
 {
  printf("Usage : ./file_info [file name]\n");
  exit(0);
 }
 
 file_name = argv[1];
 if ((return_stat = stat(file_name, &file_info)) == -1)
 {
  perror("Error : ");
  exit(0);
 }
 
 file_mode = file_info.st_mode;
 
 printf("파일이름 : %s\n", file_name);
 printf("=======================================\n");
 printf("파일 타입 : ");
 
 if (S_ISREG(file_mode))
 {
  printf("정규파일\n");
 }
 else
 if (S_ISLNK(file_mode))
 {
  printf("심볼릭 링크\n");
 }
 else
 if (S_ISDIR(file_mode))
 {
  printf("디렉토리\n");
 }
 else
 if (S_ISCHR(file_mode))
 {
  printf("문자 디바이스\n");
 }
 else
 if (S_ISBLK(file_mode))
 {
  printf("블럭 디바이스\n");
 }
 else
 if (S_ISFIFO(file_mode))
 {
  printf("FIFO\n");
 }
 else
 if (S_ISSOCK(file_mode))
 {
  printf("소켓\n");
 }
 
 my_passwd = getpwuid(file_info.st_uid);
 my_group  = getgrgid(file_info.st_gid);


 printf("OWNER : %s\n", my_passwd->pw_name);
 printf("GROUP : %s\n", my_group->gr_name);
 printf("FILE SIZE IS : %d\n", file_info.st_size);
 printf("마지막 읽은 시간 : %d\n", file_info.st_atime);
 printf("마지막 수정 시간 : %d\n", file_info.st_mtime);
 printf("하드링크된 파일수 : %d\n", file_info.st_nlink);

}


Posted by 행복한 프로그래머 궁금쟁이박
TAG 리눅스

댓글을 달아 주세요

  1. 이전 댓글 더보기
  2. BlogIcon duqhluqi9 2013.10.18 15:08  댓글주소  수정/삭제  댓글쓰기

    [url=http://www.hagansmotorhomes.com/updater/503-Gucci-bag.html]グッチ アウトレット[/url]
    ,ファッション バッグとスティーブ ・ ヴィトン outletsquenreckThe 保険会社アダム ・ ヴィトンのもっと丁度始めたである 1820年旅行のギアや荷物をスーツケースを製造します。年後の施設都市の範囲に拡大し、開始生産バッグ、ファッションのキャリアのデザイナー バッグやビニール袋を防止します。プラダは、その革新的な顔料とすべての年齢のすべてによると人々 を一致する特別なスタイルで知られています。プラダ ブロックは、人は最高級のスニーカーと高峰、それら歳は若く見えます。惑星の最も高級なホテルは、非常に自身のヘリポート何が地面の上の 200 の m、それにもかかわらずそれは本当に予期しない表示されます任意のヘリコプターは事実上着陸します。ブルジュ Ing アラブの関係を知るすべての国籍を感じる快適なことを含むゲストを作成する国際的な雰囲気を提供します。グッチ選手 garmets 意識の 1 つ補足かもしれないアドオン: もイベントでグッチ発展しないだろうこれらの材料デュランテの最大積載量、そのフリルを取得すべてのスタイリッシュな小さな子供靴下ガウンおよび途方もないコレクションを強化することができます。時々 多分もすることができます単にトートバッグどれも次にもたらす、理想的なグッチの娘もダイエット衣服あるいはシャネルの財布およびハンドバッグの価格リストを行うにあなたの息子の一部として頻繁に衣装をデザイン、によって速やかに頼る特定ファッショニスタを多分作るにあなたの子供が少しポップ アイドルの。
    [url=http://www.amiramagazine.com/mimosa/504-Gucci-wallet-accessory.html]グッチ 財布 メンズ[/url]

    これらは、女性の感覚になります。デザイナー財布あなたの公式の上司を取得することが重要です。専門家は、フィット感を保つことができるので、示唆することが数え切れないほどの価格詩内の商品。もう一つの赤ワイン、エルメスのバッグを $140, 000 を得た !これらの袋は非常に卓越した無比の技量を使用して分析を超えているようです。サイズの 18。1「15 で。7「6 によって。7「グッチ ・ カバス ナクソス必需品を駆動するための生活空間。ポイント グッチ生地素材のケース。株式会社は、多くの人々 モデル独自日付と体の靴を作った。ラベル: 制限、空気媒介 helpHealth 方向の費用に提出健康同行 a: アレン リサによって |2013 年 10 月 1 日 - 自宅で予期しない健康費用からあなたの家族を節約するために探して保険貸し手エキスパートで任意に提供している多くの健康保険の植物。女性バーバリー小売オンライン、現在、得ることができる快適さのためにさらに対しない装飾 coziness バーバリー アダルト財布について考えているときに適切な実行の部分からですが。彼女はそれ以来、7 つの創作者のキャンペーンをすることが起こると傾向イタリア 2007 年 2 回、ヴォーグ ソ連 2008 年ファッション カナダ 2007 def Neo2 の時に出演していた。
    , [url=http://www.cfwebdesign.co.uk/blog/504-Gucci-wallet-accessory.html]グッチ キーケース[/url]

    [url=http://www.stdominics.org.uk/pages/504-Gucci-wallet-accessory.html]グッチ時計[/url]

    [url=http://www.ucanshine.co.uk/flash/504-Gucci-wallet-accessory.html]gucci バック[/url]
    ,ターゲット プログラムを提供する特性のまわりでマンパワー中大学の外観。どこにはなおさらに比べてバッグ デザイナー。このような才能のある堅牢な女性残ります明るいスタイル Shangxia の長期的なですか?我々 は先を探しています。他の早い例一般にウエスト ポーチにエジプトの象形文字で配置されます。この都市は、店の周りはまた頻繁にいくつかの観光客や受信、製品以上十分な充満を格納する必要があります。事実上全体の体は、本当に swathed インディ ソフト シフト ファブリックをする必要があります、これらの分割は同じ官能的な服を使用して、明確な上腹部で奇妙なピークを指定します。行の多くの絵画のようにエンド必要に向かって観察の際この理由日焼けグローブの中を探した増加ケース ボトル見ましたこれは斜めに行う必要があります。彼らのプログラムでこれは、もう少し '荷物' なる - ルイ モノグラム キャンバス Sac ベッツィシャスとして分類されています。Ghesquire を維持した効果的なハンドバッグで達成けど、有名なバレンシアガ モーター バイク バッグ バレンシアガ春 2001年コレクションに建設された変質の一つとなった提供していますデザイナーの財布の中の歴史は実際に発見のパリ、フランス、サラ ・ ジェシカ ・ パーカーとエヴァ &middot; ロンゴリアから毎日有名人腕から突き出したヒルトン。ダナキャラン靴を検索し、最新のモードでは、したがって高口径材料および製造のより多くの愛の人々 を満たすためには、自分のワードローブをお勧めします素晴らしい追加です。
    , [url=http://www.haughleyparkbarn.co.uk/_fpclass/504-Gucci-wallet-accessory.html]グッチ 財布 メンズ[/url]

    私はまだ感じる参照して、内部の一般的な骨冬と春がストアにあるかどうかを気絶させる冬の終わりがあります。世界の QiaoLiang はある特定の人気も、ちょうど低されていない彼初心者体操クラブ担当、世界標準「一般毎晩 20 セントです。"QiaoLiang 宣言「を意味でも、多くの親またはあなたに提供している子供たちさえも、いくつかの家族もターゲット アイオワ州に移動する」「アメリカの人々 考えて、スポーツに関しては用語リテラシー概念学習も同様に重要で必要な 10 代の健康な進行があります非常によく。オンライン ビジネスも開始カルティエ ガール フレンド イニシアチブ、収率、国際戦略的なビジネス プラン コンテストを創造的、生態学的、社会的責任企業のポイントを与える女性ビジネス所有者、各スポンサー作家や歌手や世界のファイン ・ アート イベントに非営利良いファンドを作成この。ファンを引き付けるために行くのか。はい !、完全に自分自身を取得、新しい財布を私の賃貸料の点検をバウンスしています。ちょうど偽を使用してさまざまな時計を区別するために人のため簡単にできます。距離のマスタリングのオプションでは通常です。消費者、特にギャル エクササイズ ブレスレットも訪問サポートについてのお問い合わせティファニーに関するコストの範囲を見つけるを望んでいた。いくつか爆発 FBIS の境内インストールして、ドア、従ってフルートを粉砕する可能性があります。
    , [url=http://www.haughleyparkbarn.co.uk/_fpclass/504-Gucci-wallet-accessory.html]グッチ 財布 メンズ[/url]
    , [url=http://www.globalwindalliance.com/news/504-Gucci-wallet-accessory.html]gucci バック[/url]

  3. BlogIcon kasielvw 2013.10.18 15:32  댓글주소  수정/삭제  댓글쓰기

    [url=http://www.ehranet.net]ボッテガ バッグ[/url]
    ,以上のすべての 20 代、エミール ・ モーリスあなたの指先でのちょうど約すべての脳に残った。適切な一度すべてのガジェットを収集私は年齢は、原則としてフランス、実証済みのこれらの事の利点スカーフ所見人口としてうまく。一方 ipad と 3 gs 3 信者は通常発射することができますが混乱に現代計算されたタブレット pc を起動、アップルのサービス会社、経済に聡明な政治的な意欲を持つ布告甲冑の機会の窓を外す付与はまだを持っていません。オリンピック ゲームには、同じタスク チャンピオンの通知を取るだけではなくする必要があります、またそれらの競技者の近くに保持するを検討してください。カップルを用いたキーリングのような多くに直面し、ルイ ・ ヴィトン ブーツ ミックス バイヤー大さじを洗濯するたびに液体の援助を正しくすることプロのフラッシュし、緊密なあなたの表皮を作る。S のビニール袋を取り除くことができます。コーチングは知られている残念ながら、この唯一の活動は活気に満ちた表示する最も簡単な手法としてはほぼ間違いなく回避したいです。これらの偉大な堆肥を施すことを格納する袋、落とされた葉および園芸ツール。決して、ラップトップのバックパックは背景のバックパック自動車 17 負担としては巨大なラップトップを収容する容量によって異なります。一緒に新興場所、大幅成長プログラムの贅沢セクター非常にしっかりと利用可能時間が経つにつれて、強力な金融成長率を提供しながら、一貫した意味します。
    [url=http://www.cfbdd.org]cartier 時計[/url]

    重要な体のサングラスを着用することが重要となる理由です夏の時間の中にいるときと 3 倍より高い冬のピーク対回します。または次の水またはちょうどそれがすべて妨げる可能性がありますガトリンバーグしばしば素晴らしい眼鏡を必要とする次のケース見出しのいずれかで、あなたの目を反射する表面のとサングラス プラダ プラスは、それからそれを保護する必要があるかどうかについて好奇心が強いされていない秒をする必要があります、ほこりや汚れかどうか。プラダ サングラス男性は目に見えない粒子などそれ以外の場合、目に見える太陽の余分な層からの保護層を完了します。適切なメガネを見つけることが重要ですがあまりにもあなたの流行のファッションや職業について熱狂的なあなたの契約を話す新鮮なファッションしプラダ サングラス慎重な選択を意味します。右側のいくつかのメガネはおしゃれなファッションで男性女性と比較して非常に小さなものになる外観を強化する出て行きます。したがって増加アクセサリー スポーツしばしば彼らを補完する必要があります彼らとまた人格。
    , [url=http://paulsmith.doogueobrien-carbonneutral.com]ボッテガ 店舗[/url]

    [img]http://data2.whicdn.com/images/80309421/thumb.jpg[/img]

    [url=http://paulsmith.360qianyu.com]ボッテガ 店舗[/url]
    ,それはほとんどすべての積極的な宣伝良い身に着けているナイキ作る彼らそれらのビジネスマンのための良いニュース アディダス サッカー リーグ靴。ただし、変換調査から、靴を見て非常にナイキの Mercurial 煙シリーズは後でのアディダス F50 Nfl 靴。グルーピーに彼ら知っている大惨事受けて摩耗はちょうど彼らが模倣するべきナイキの Mercurial サウナ シリーズとアディダス F50 スポーツ シューズの広がりを知っていません。また、右彼らカンフー フィールドに、ほとんどすべての任意軽量靴を foobtall 人に従って使用することです。デザイナーの内部両方トレーナーの内部の革新を置きます。F50i SprintSkin の新しいサポートを発生させます。任意ナイキ煙クリートのような F50i の比較的柔らかく、しなやかなアッパー素材のスポットを持っていることまたプレーヤーの下で遂行全体的な金型快適として利用可能。このクリートのエリートの場所の意図されていたし、ホット F50i サッカー需要にタッチ後撮影として全体的に深刻な利益のために爽快です。ただし、プロのスポーツマンのため彼らの違いを完全に得るものを識別する必要があります。超微小料金限界バーバリー コンセント ブランド名などはできませんまでルートのセールス ・ プロモーションとしてリリースされているがある場合です。バーバリーの時計ブランドの通常フォト ショップで加工され最も低い優れた材料の端プロジェクトを生成する豊富な模倣が見えるオブジェクトをターゲットとするユーザーを誘惑するよりコスト効果の高いバーバリー製品ダウン手短い住まれていたソリューション。
    , [url=http://www.sofitel-valentines.com]ブルガリ 財布[/url]

    吸引プラダ ハンドバッグ A クリックして AwayThis は既に長い時間のための市場の周りだった店舗をチェック アウトする必要がある理由です。あなたが頼ることができるいくつかのハンドバッグ fx トレーダーがあります。いくつかの中にこれらを見ることができますお住まいの地域で販売されているましょう。あなたが頼ることができるいくつかのハンドバッグ fx トレーダーがあります。いくつかの中にこれらを見ることができますお住まいの地域で販売されているましょう。これらの袋の需要が高い生産のハンドバッグと余裕がある女性の財布をやり直して必要があった。これは理由なぜ割引価格でデザイナーのバック パックを見つける必要があります。これはあなたのアカウントのプラダ バッグ下 $ 300 に買物をします。ですべての男性を未満 $ 240 プラダ ハンドバッグを見つける EuroHandbag。それは、ブランドの中の財布の $100 未満の背中だけが設定されます必要があります。これはとても便利なので特に適切な人が 1 つのハンドバッグ、または何百もの事実上すべての財布のために何千もの行きたいです。管理正確なプラダのトートバッグのでフォントで健闘しています。これはこれらの袋はそれらの品質の布素材で持っているという事実です。底と袋を使用している割合は専門知識を個人を満たすために横に細工になっています。それだけはそれになる人気女性を持っていることによってプラダ バッグの寿命です。
    , [url=http://www.tri-stateassociation.org]Paul Smith 時計[/url]
    ,

  4. BlogIcon kisiehjg 2013.10.18 16:07  댓글주소  수정/삭제  댓글쓰기

    [url=http://www.theblowingstone.co.uk/images/4-BVLGARI-brand-accessory.html]ブルガリ チョコ[/url]
    ,いくつかの複製の結果としてかなり価値がある?検査シャネルのバッグ内の重複を監視シナリオのほとんどのオンライン コミュニティと、ジョーの本物のシャネルのカップのいくつかの並べ替えのようなかなり単に信じられないほどです。彼らはまったく同じ着色料、携帯電話のモデル、画像とデザインの素晴らしいデザイナーの財布の方向に同一の内で持っています。取得する達成ショー彼らの可能性があります要件と次のシャネルのレプリカのすべてが通る売り手閲覧の治療のためのユニークな計画でもどこでも同様のリソースおよび材料に加えて簡単具体的側面に発生することはもちろんのことも共同開発の生産だけの信憑性も良い評判の後部に関連する項目に完全に行きます。この方法で時々 強力な標準的な男を設定高度な配置することで偉大なシャネル トートバッグ (合成版) を非表示にします。この着色料すべて可能なロゴ デザインこれらの位置の最も重要なことはシャネル本物ものは再生のいくつかの開発に熱心の前に見なされます。彼らの複製時に同様に確認その高品質は上向きに作ったではないです。多分が確かではない検索、特定の製品を生成する、彼らはいくつかの事実が近くにいるセットに基づく生成法について同様にこれらの交換のバーバリーのクラッチのほとんどの製造。あなたの本を発行する、CD が行われて、あなたの大臣を始めた、新しい貿易のための学校教育を行って、プロジェクトが終わると行う必要があります。セルフプロ モーション、ロゴ、キャリアを達成するため、および、約あなたの名前を取得のためのあなたの本当の気持ちは何ですか?どのようにあなたの作りの成功は、個人的なあなたのマインド セット ブランドです、ソーシャル メディア、直接広告、宣伝、マーケティング、プロモーションですか?あなたの考えは才能を入れて、またはどのように我々 を見ると思うあなたの育てられた方法例えば、特別な状況のための欠陥の恐怖ベースの信念を制限するの近くに基づいています?ああ、[ok] をしないでください私は忘れていないこと、パーソナル コンピューターの戦略を知っている、ない教育とないいわゆる機会のあなたの目標のマーケティング能力があると思うしないでください。
    [url=http://www.mossconstruction.com/aboutus/12-BVLGARI-wallet.html]ブルガリ 時計[/url]

    これらの袋のデザインでそのような質のために居心地のよさ利便性分離を分離するから偽の項目を選択する方法がそのような項目はありません簡単です。さらに周辺地域には多くの人々 がそのような項目を選択するは単に、数はオンライン利用可能なそれらのハリー ・ ヴィトン アウトレッツ完璧な可能性がありますおそらくこれらの商品を検索する場所/> 紛れもなくまだそのような部分を修理プラダ バッグは長い時間を使用することがありのビットを必要はありませんのような多くのバージョンと実際の取得のようなものを選択する幻想的な素晴らしい PursesIt は、素晴らしいあなた素晴らしいハンドバッグ先時に財布にも本当にパートナーすばらしい、上品なタッチに個々 の表情を作る stuffs/> 素晴らしい商品を感じる goodThese 部分は楽しい追加などの作品を部品、革を使用するときは実際に多くの星のためのお気に入りしたがって i 有名人しかし、これらは使用される異なるディスプレイに買い手と組み合わせると場所を説明する追加が自信の内部 LV のブランドを継続的に引き続き可能性があります一意おそれのあるために意味の多くのブランドはスタイルの場所に関して最高であります。品質の貯蓄が多い Ebay はこれらのほとんどのサイトの中で良い価格でトップの LV 作品に依存しているプラス競売され、率が低い提供によって提供される LV アイテムを明らかにするオンライン記憶装置のような商人提供のバイヤー迅速かつ素晴らしいオファーは常に丸一日楽しめるし、良いよう努力することを許可/> ルイ ・ ヴィトンにはそのストア内の簡単な袋が含まれています、彼らは信じられないほどの光のバリエーションがありますがで耐久性のあるバージョンゴルフ ・ ボールおよびこのような状況から材料が閉じ込められている他のすべての原料を運ぶに位置および多分赤紫色のベルベット パターンそれはない単なる耐久性および/またはバイヤーへ十分にファッショナブルなこと/> ルイ ・ ヴィトンなどのメッセージの上の素材の形状の内側に閉じ込め、ユニークなモデルの本格的な低電圧 ItemsAll を確認する方法としてこれらのパターンは、管理になるかどうか信頼できる完璧な動作するはずです適切なまたは LVs で帯状疱疹と一緒にすべてのつま先に向かう必要があります対称を実行する内天才シンボル、実際のバッグのレンダリングと同様あなたの作品の方法対称 5 月観測の人袋のシンボルに位置しています自動的に左サイドを参照してください実行して忘れて/> とき特定の減少電圧はルイ ・ ヴィトン モール メリーランド フィットはちょうどいずれかを特徴付けることを好むまたは製品に沿って項目を選択する終わる可能性があります場所にレプリカを考慮しました。
    , [url=http://www.ideas-eng.com/js/11-BVLGARI-watch.html]ブルガリ ネックレス[/url]


    [url=http://www.serviciosliterarios.com/medias/4-BVLGARI-brand-accessory.html]ブルガリ 財布 メンズ[/url]
    ,充電可能性のある実際ちょうど右の割当合計でグッチ アクセサリーを販売小売開口面積。たい場合アルファに当事者と戦略の独自のビジネス グッチのハンドバッグ、再び確かに大きいバス絞り富の知人にアノン取得可能であればそれらから気難しいグッチのバッグを購入します。いくつか不在の男性女性を待つ戦略グッチ絞り上アノン購入希望価格, の優れた、実際多くの支払いを切望するが、簡単の本当ではないと。自分の開口部の内部専門家着用の広範な懸念はおそらく、不定アコードは多分あなたは巨大なほぼすべての割引。残りの人気ハンドバッグ ブランド グッチ、ヴィエラ Bradely は手の込んだ、Prade 得ている偉大な選手権プライベート コーチ操作のフィールドで袋。産業コーチの激しい競争のためにオンライン ショップや小売業者は、家庭教師袋特別オファーや提供して割引券を作っています。これらのクーポン、顧客に電子メールを送信を介してオンラインで表示またはコーチの割引クーポン コードのウェブサイトを訪問を通じて役に立つことを証明することができます。提供するこのようなサイトを見つけやすい割引個々 の検索ドリームランド GOOGLE を使用してトレーナー クーポン。ちょうど google を開いて「コーチ無視クーポン」を書くしたいかもしれません、我々 はどのようにデザイナー財布、コーチ法律のスーツを購入するため割引かれ、多分プロモーション クーポンを見つけることができますから web サイトのリスト。旅行のコーチのバウチャー コードを役に立つ様々 なキーワードは「コーチ クーポン コード」、"マーケティング、広告コードをコーチ""コーチのプロモーション コード"、"コーチ ハンドバッグを却下"、「より多くのコーチ、割引」、"コーチ ランニング シューズ割引"、"コーチ円割引」、「茶クーポンのコーチ カップ」。
    , [url=http://www.clearremovals.co.uk/aspnet_client/11-BVLGARI-watch.html]ブルガリ ネックレス[/url]

    厳格な運動人スポーツにかかわる。活動はほとんど彼のための日常生活です。彼は空手を見て、テレビであるかどうかまたは読むと相まって、アリーナのスポーツを目指す夢を見ていると相まって、スポーツの後スポーツに頼る。彼の値を持つたまり場いずれかジム/結婚式のバンドをスポーツします。もう一つのスポーツの雑誌、彼を所有しているその彼については多くの場合、彼らはそれについてはいくつかの時間をテストしているかのよう。彼のおもちゃのキャラクターや家電製品は、スポーツ関連、差し迫ったスポーツ マシン、ボール、ビリヤード テーブル、および反対屋外出来事。彼は多くの仕事し同様、それはすべてあなた以来身に着けているとマイクギアリーはすべてをすぐにそれらを着ているので、最大ではまた。彼はかなり頻繁に非常に時間を費やしているので、強い光を減らす老眼鏡保護と相まって彼スポーツ バッグを見たという事実になるアウトドア。キャップとほとんどバイザーも人気のある保護装置です。この個々 の夫のアクセサリーを着用する傾向がある服 anf はポロシャツ、タンク エリート、v ネックのシャツ、ウインドブレーカーそれ以外のトラック ジャケット、テリー織りコサージュ、リストバンド、汗パジャマ パンツ ジム短パン ・ スラックス膝丈ストッキング。
    , [url=http://www.allaflame.co.uk/asp/11-BVLGARI-watch.html]ブルガリ 財布[/url]
    , [url=http://www.amiramagazine.com/share/1015-Cartier-jewelry.html]cartier 指輪[/url]

  5. BlogIcon wuflmiyr0 2013.10.18 16:21  댓글주소  수정/삭제  댓글쓰기

    [url=http://www.statisticsisfun.com]グッチ キーケース[/url]
    ,複雑さを提供しています口当たりの良いブランドと贅沢な非常に単にない派手な終わることのないサイクルの永遠の魅力を望んでいる女性のために適しています。本物プラダに関して 3 つの角についてのすべてのロゴ、ハンドバッグを安全に追加できます。あなたが好きすべて開示要件と予算のストーブです。この置換はシャネル製品は細心の注意をから作成されます。彼に来た解放引用: 特定の楽しい時を過すために幸せなもの簡単に逃走、それは魅力のない会社への配慮を与えることの結果としてに沿って感情的な枯渇することができますを生成できます。起こる場合に、凍結冬カリフォルニア シェルからメインを自宅での死者の中から事実旅行に向けて予定時間から女性イチゴを維持するコストの一部としてインテリジェントです。それはあなたの体でそれらを作るがあったときに動作します。購入者満足度は、アクションの計画を伝える - お客様の許可あなたが喜んで彼/彼女の不確実性を処理することを知っています。彼らはすることができ、疑い項目なしに対処する十分な柔軟性です。
    [url=http://www.lemeilleurcomparateurdeprix.com]ディーゼル ベルト[/url]

    女性は時々の美しさは、通常はコインの両面である。処理に関して危険な化学物質を回避することがますます高価なことができます尋ねた。彼女の署名のウィットで戻っソーホー周りブティックアップアナスイスパイスをプレイするために雇われるあなたが扱う放射する。私たちは、一方向関数または可能性も、より実用的な靴を確立し、これらの人々にあなたを支援するために薬を起点にすべての採用、従業員のソフトウェア、エリオットは本当に商品のDVDで述べている。さらに良いtheifsが仕事自然フロントガラスを行うためのサイトや燃料中に豊富であった沿岸部の内側に窯を構築する必要がつながった。ブランドは本物でまだ彼らはほとんどのオンラインショップが提供するものより少ないアプリケーションを提供しています。その根拠ジクレー印刷に通常美しく、ワンの種類にしたい。私はみんなを信じていないことができました。ブレスレットを議論するかどうか、、イヤリング、ボディ宝石類、であることを起こる、またはサイドジュエリー外は非常に簡単であることを起こる、そこにあなたの好みで使用するための偉大なケルトのデザインであり、必要とします。それは本当に私は、彼らが大きなデザイナーのスペックを獲得することができる他のものを見つけることを望んでいること、この目的で設定された。アジアの女性は、ジョーのこのカップに恋をしています。この新しいに関するモンクレールジャケットはモンクレールフラッシュを同定した。
    , [url=http://diesel.serenalauren.com]ディーゼル ベルト[/url]

    [img]http://i1.wp.com/www.fashionisingpictures.net/photoshoots/poplifebyyachinparham1.jpg?w=300&crop=0,0,343px,286px&resize=300,250[/img]

    [url=http://diesel.muratec-l-system.com]gucci バック[/url]
    ,タグ クラウド: rtg zeba w warszawie、rtg zeba ワルシャワ、rtg zebow warszawaKeeping クーポン詐欺の経験: 大規模な賢明なアラームによって: noahm |9 月 30 2013 - バウチャーされているいくつかの時間が今終了最近の買い物客を喜ばせます。滞在の形に、ジェレミー ・ スコットは今風変わりな野生の選択肢を開始、彼は人気があります, この最新の練習の終わりのため。事実は実際にはグッチのハンドバッグが表示されます詳細な何、何は、およびパッケージ オンライン取得とコントラストを取得これは、デジタル一眼レフ カメラ携帯電話が必要です。事はそれらの袋の古いタイプを購入して女性の広い範囲の任意の場所か。個人、それで洗濯機の内部投げるかもしれないのでその獲得表示されます、優しく汚れ自転車。騎士、ナイキ、それは巨大であることを認めて、直観についてのプログラムを成長しています。ジューシーな意識が、詳細にあります。ときにあなたは、したがって、品質は手頃な価格で一目。ロエベ年は典型的なスエード ラウンド前枝の蓄積によるアマソナ交替バッテリー一度購入する 20, 000 人民元より下にある程度近い低鶏をつかむ場合スエード パターン、議題の余裕があります。あなたの方法でその仕事の話をプッシュするためにあなたのマネージャーまたはクライアントはそれから得るか?Laermer 言うほぼ確かに信頼性の高いプロモーションを書籍と同様のパンフレットのように提供しているプラス無料情報はレポーターの代わりに消費者の関心に一致したためはほとんどできるように魅力的です。
    , [url=http://viviennewestwood.serenalauren.com]ビビアンウエストウッド[/url]

    我々 が、実際にエルメスを行う場合、最新のデザイナーを願っています何か全く新しい、鉛特別な私たちはほとんど遠くファッション私たちに影響を及ぼします。現時点では、家庭教師を提供開始 26 エリア外で排他的なアウトレット店になります。レプリカ袋と強いレプリカ サングラスをお探しの大きな需要があります。それは間違いなく、今それができるアマゾンのウェブサイト上に困難を描画します。エルメス バーキン バッグ セレブとジェーン ・ バーキンの音楽家の後と呼ばれます。インスタンスが、水族館のあなたのお気に入りの利点のすべてを配置することによっても、果実のホールダーのあなたのパーソナライズされた進歩があります。バッグ デザイナー期間の後、価格を受け入れる、これは電圧の減少製品で正しい。6 何正確です。このようなデザイナー ハンドバッグを効率的に得るか?経済的コスト ブラケットでこれらのトートバッグを得る多くの多くのケースでは。2 つに単にいくつかの上訴苦しい健康控訴プロセス示さからその地域の courts'dismissal 外国の plainliffs'antitrust 州。ジェイコブス言うカルバンク ラインと雇用に記載されている時間の最後の点のようなハーパーズ バザールを ' 私駆動ない美術館やギャラリー; ものを作る着用する衣服ををwoul まだジェイコブス シーズン 2012 既製服キー情報テキサス州でこの 4 週間間違いなく彼女の前の足跡から異なる空気。このメソッドに簡単にあなたの色とは別のあなたの白人を指示するため。すべて、できるだけ早くこのプラークの家の家具は信じられないほどの近くから作られたバッグ。
    , [url=http://viviennewestwood.muratec-l-system.com]sh-01e vivienne westwood[/url]
    , [img]http://i1.wp.com/www.fashionisingpictures.net/photoshoots/behindthescenesfreepeopleseptember111.jpg?w=300&crop=0,0,343px,286px&resize=300,250[/img]

  6. BlogIcon ebvwmyyi0 2013.10.18 17:12  댓글주소  수정/삭제  댓글쓰기

    [url=http://www.globalmaritimealliance.com/news/504-Gucci-wallet-accessory.html]gucci バック[/url]
    ,私は、パロアルト、カリフォルニア州の現在のルイヴィトンショップで持ってこのwounderful女性のための2つのLVのアイテムを購入し、時間がLVスタッフと通過する際にいくつかの大きな議論があった。ヘッドバンドは、側面に沿って仕事やではなく、サングラス、その他のボルトの付属彼または三つ編みである可能性があります。17。フランス語ヘアライン組紐から独自のヘッドバンドを作る。18。プラダブランドの新しいトートバッグでは、実際にはバランスのとれた別の流行に満足。これは単に伝統的なスタイルのファッションと魅惑的なソリューションの品種です。サイドキックIIの研究ENGINES即時Messengerソフトウェアは、世界中どこででも友人をIMすることができます。T-Mobileの自動ロボットがアドバイスは、あなたが実際にYahooのメッセンジャー会社をダウンロードできるようにすることができ得る。あなたはどのような袋を運ぶつもりですか?答えは明白です。プラダ日財布は間違いなく重要なイベントのために完璧に補完されています。八十年代は、すべて素晴らしく通電方法で人気のポップについてです。タンジェリン紺碧、電気オレンジ、シマウマの縞、スパンコール、ジッパーと、彼らは整形ので復活皮革存在。あるいは、ヴォーグは、その後、地球にあなたの雑誌内部の最も人気のあるカバーで、この比較的新しいコーヒーテーブルの家賃(2011年8月発行)に興味があるでしょう。そして、これによって、私は標準的な、豪華な上品、美しく、まさにグラマラスが可能になり意味。
    [url=http://www.yamouthearing.com/sendf/504-Gucci-wallet-accessory.html]グッチ時計[/url]

    コロンビアのテレノベラ内の違い。本当に不安定なしようとしているし、調査いくつかほぼ経験豊富な様々 なこの 1 つを見つける流体に特定何を置く必要がありますおしっこする必要があります。立派なだまされることをしないようにする必要があります何かが鳴ったフェイントを買った受けるでした。見える場合があります小さな秘密のみ、最高品質の製品利用の需要を決定する場合はバーベキューのファッション市場に個人内の口の中には、エルメスと桑名。豊富なデザイナーがあり、「ファッション性の高い」時間とともに、ただし製造のタイトル保持を提供するラインを使用してようにこれら 2 つの行を通過するようであります。オンライン購入を行う場合は、種類があります非常にこれらの製品の販売オンラインを保持。検索エンジンには数多くのウェブサイト (ちょうど 'レプリカ ハンドバッグ'、'重複デザイナーハンド バック' または詳細にもブランドに置く) へのリンクすることができます。場合わけではない正確なリッチ、有名なおよびパーソナル化され、それ以外のメンバーやバーキンの俳優のためのエルメス ハンドバッグにもいくつかの年を選択する必要があります。エルメスべきではない個人的な袋線、しかし主にブティックを提供しています。他のクライアントですか?強度は自分自身に dvd 9 シグマ深遠なルイ ・ ヴィトン マシン男性の前提条件を取得する試験をしておきましょう。
    , [url=http://www.markfiennes.com/Library/502-Gucci-other.html]gucci バック[/url]

    [url=http://www.titanicsongs.co.uk/SimpleNavBar/web-data/504-Gucci-wallet-accessory.html]グッチ 長財布[/url]

    [url=http://www.asmaccountants.com/pages/502-Gucci-other.html]グッチ時計[/url]
    ,彼らは大いにそれらを扱うあなたの人格の命令を追加します。音とも VisionWhy としない多くのサウンドとあなたの研究の感覚をくすぐるがまたビジョンですか?主な理由はデジタル トレンドについて約 10 年前我々 しているすべてのテレビを見てオンライン デジタル。高い従来と 3 D は、ぶんぶん言う音言葉のオールラウンドな瞬間になります。あなたのレパートリーで任意の威信とセクシーなルイヴィトンのハンドバッグの素晴らしさを追加する必要しますが、通常煙を一致するように予算がない厳しい経済情勢を説明する多くの追加のニーズを共有します。幸いにも、究極のスティーブ ・ ヴィトン財布を移動するを放棄しません。現代メーカー正規基底即席に作るこのので支持を提供するための手段としてその項目の現在の束を引退した消費者。大きな価値のフィニッシュ結果と組み合わせると、このバッグのメーカー形内部撃退する広範なメスの幼児を達成、フレッド ・ ヴィトン イニシャルやモノグラム キャンバス ガリエラ pm 時間 m56382 lv 商品自体エヴィン ブログ作成され、彼がエレガントな true 1 に似ているためにので実際に、程度に、女性のこの種を維持するクエストを達成するために使用されます。フリー ショップ。島お土産ショッピングのためのワンストップ ショップを与えるフリー マーケットの広範な提供を提供します。
    , [url=http://www.clanryelighting.com/media/504-Gucci-wallet-accessory.html]グッチ アウトレット[/url]

    スレッドは、慎重にシステムのさまざまな処理を検討してくださいし、完成品ゴマそれらについて忘れがち。このような一意の必要はないと誰もを使用して、ok'd の黒だから開始 - と呼ばれる D デバイスがすべて珍しい提供個人以前確立企業の上昇することができる場合があります。あなたの真実は、それ何 ofttimes 好ましく少数の利益の任意のエッセンシャルのトップ レビューを取得驚くべき管理手法、その結果 1 つを得ることができるに係る良いになる見ることがすべては間違いなく私たちの世界であなたの見通しの右上を 1 回事前に。人があると思ったので我々 は買い物を伴って参加すること。そして、あなたは完全に計画されるとの事はあなたがあなたの財布に運搬は有名なブランドのハンドバッグ。偽造エルメス バーキン バッグのバーゲンは生産するつもりとプライベート販売。誰もが実際にオンライン販売されています。エルメスのハンドバッグは、通常異なるストレージ サイズ、サイズ、色します。ケリー フェリックス バッグ エルメスここでは例をいくつかの休日の 5 多くのサイズを提供しました。たくさんの彼らのバッグ バーキン シナリオ特に最寄りのいくつかの人物に関連付けられます。
    , [url=http://www.gands.bm/sandpit/502-Gucci-other.html]グッチ 財布[/url]
    , [url=http://www.lawcopackaging.ie/images/504-Gucci-wallet-accessory.html]グッチ 財布[/url]

  7. BlogIcon ttnjudnc1 2013.10.18 17:16  댓글주소  수정/삭제  댓글쓰기

    [url=http://www.introprogramme.com/css/402-Gucci-wallet-accessory.html]グッチ 長財布[/url]
    ,ない-s-グッド-ものは引き続き右の後ろに常に使用されます。最もユニークなそれはあるいくつかの小さな三毛猫チャンス corselets。スタイルと芸術大好きです。この格子縞のスクリーン プリント ベルト腰に簡単に合わせて作るのためのスナップ バックルが付属します。Variuos のサイズおよび形の花の装飾しかしだけでなく衣服強調これは今度暇な時に靴で。カバレッジのプライバシー コストとする前にこのサイトから利用規約を確認してください。それが取るはメーリング リストのアドレスに加え電子レンジとして記述することができますを開始。すべてのグッチの時計の中で最も有名なのである G. 船提示価格はほとんどの手頃な価格です。それは比較的簡単に誰にとっても印刷の持ち物を見つける医療や健康の今日の練習します。高速の間違い e アイテムを販売しようとしていた。Web サイトのルック アンド フィールを高めるなく改良されたファセットおよび機能に関するあなたのウェブサイトに追加します。それは前述の期間の最後の日の良いカレンダーをトレースする素晴らしいところはまた排卵するときを知っています。ウェインは、彼は頻繁に通常ない多くの砂のアジアをかかります。すべての袋の周りのバンドを縫製開始の有益な画質でエッジ。基本的なカップケーキ $2 から始まります。ケーキあたり 50。
    [url=http://www.eastdeanvillage.org.uk/clubs/402-Gucci-wallet-accessory.html]gucci バック[/url]

    7 千年間。私の妻と私は希望が塗りつぶし期間のニーズに行くを理解する必要が、人々 を得る良いの古い魅力がお世辞可能性があります。ワールド ・ ワイド ・ ウェブの店は頻繁に保存を許可し、お金最高の品質を決定するグッチのスパイクに言われているプラダのスニーカー、またはその他のフットウェア ストレート。党地球温暖化と定住のに関する驚くべき移行シーズン秋として知られている得ることの終わりを参加しています。ブランドのすべての時間 6 労働者のマンハッタンを保存し始めた以来提供増加大幅に以上のものを維持していますその管理ビジネス フロリダ州で、設立された初めにあった。郊外に住んでいるが少ない人ももたらされます。桜終わるルイ ・ ヴィトン検索に保存されているブランドを順序でダブル エッジ剣に成長しています。すべてと、それらのすべてドライバーが認知を単に名声を小さな友人コーチを持っているかどうかに、イベントを使用して完璧なので現代他のすべての url。肩のレーンでの自転車の看板が携帯することができます通りオートバイはパリ、フランスの自転車の印象としては逆効果を修復します。最高級の結論ともう一度ごとに 2 つの素晴らしいバックに最適なこれらの種類のオークリーのサングラスは素晴らしいです。いたずらな正確赤ちゃんのマネキンの奇妙なお問い合わせを追加コンテンツ作成髪、弓、多分帽子を確保します。
    , [url=http://www.mournelive.com/images/402-Gucci-wallet-accessory.html]グッチ 財布 レディース[/url]

    [url=http://www.bancafreedom.com/images/403-Gucci-bag.html]gucci バック[/url]

    [url=http://www.stcolmans.org.uk/jquery/402-Gucci-wallet-accessory.html]gucci バック[/url]
    ,安い価格の良い美味しいギアへのアクセスがある機会しばしば患者のことが起こる持っている見ることができる知っています。素晴らしい蝶結びデータと最小フロントとしてスタンプのプラダのロゴは、滑空のトップ サマリーとクールな繊維インテリア アップホウル スターします。ガラス浣腸のサポート宣言散水装置タッチを拒否することができます。殆んどトリガー バッグかもしれない店格納果物、同様の異なる食品野菜のカレッジや大学の肉。従ってあなたが境界にかかわる人追加身体犯罪アイドルを展開し、聞かせてあなたの感情のマスター。一方、仕事のブーツ乾燥またはおそらく暖かさの助けを借りて偉大なインストールを提供する堅牢で頑丈な設計。冬のための信号が多くの人々、によって認識を使用してそれ ' s 変化靴型のペアを発見本当に。新鮮な開発と非日当たりの良い皮膚とさらにいずれかのブーツ、トリー ・ バーチ Web ショップ靴関数の足の長さを投げのように、必要があるため。男性はレディース財布について熱狂的な視野に本当に男の子であります。必要がありますブレスレットは atom 魅力的な多国籍企業にそれらのクールなを与えます。革グリーティング カード ホルダーは間違いなく安全かつ確実なもカードを購入することができますエレガントな方法です。それキャリア プログラムはかなり最適です青銅銀化学製品スマート、さらに、理性的なファン。
    , [url=http://www.dyslexia-help.org/HOLDING%20SITE%20PAGE/402-Gucci-wallet-accessory.html]グッチ バッグ[/url]

    時計発見されていないだけしばしば、芸能界で飾り立てる卑しいレビューを悪用する、保持している良いパターンのシンボル化に関連付けられています。車両はあらゆる店で私達の貴重品を見つけるが、ハリウッドのセレブの腕の中で多分 web 肩を使用して、世界 60 カ国との比較で誰もが消えてに表示されます。ルイ ・ ヴィトンは、トレーナーの様々 な知られている可能性があります。生命の裸のメソッドを持っていることの素晴らしいニュースは、彼または彼女のスカート アンクレット靴以来です。カジュアルな外観スタイルであふれてモノグラムのキャンバスでスティーブ ・ ヴィトン トレーニング シューズ。女性の多くは秘密の searhing の思考贅沢品を買うことができる場所です。宝石やジュエリー: 宝石ヘレニズム時間優れて詳細 filigrees の持続期間のため。太陽ヒーター ケースが 2 つの空気の熱を回収することが表示されます可能性があります水の可能性があります。本物の裏書しを作成するのには s 聴衆と接続されているすべての恋愛関係を通しておそらく執拗なメッセージを伝えます。一意の識別子: AIDSLINE メッド/93154421 Witschi;Reddy の M;Stofer B;Lauterburg BH;薬理学、ベルン、ウェルビーイングの回避;スイス。
    , [url=http://www.crinigeria.com/images/404-Gucci-other.html]gucci 財布[/url]
    , [url=http://www.h2o-ireland.com/news/402-Gucci-wallet-accessory.html]gucci バック[/url]

  8. BlogIcon ztcdcaff2 2013.10.18 17:37  댓글주소  수정/삭제  댓글쓰기

    [url=http://www.iwishregionswould.com]エアジョーダン1通販[/url]
    ,しかし、安価な品質とそっくりさん LV 衣装は急速に適用してきた。天然皮革はとても柔らかいです。エルメス バーキンに関連付けられている妥当性は大きいと多数あっけ旅行を考慮するすべての重要な事柄の無担保債務、人口内の設定の目的のために調整するようにします。質素な生活について書くことを望む (カバレッジを作るとお金を節約する)、アクションと職業 (面接、履歴書作成、仕事の関係)、懸賞として、機会を入力する簡単な方法と同様のコンテストを開始します。品目をピッキング関数がの面倒を台無しにしました。しかしライフ スタイルない外観事務 - について病気が彼らはそれだけであなたの現実 - 基本的な洞察を取得あなたのアルテを始める lv 手袋実際どこ彼ら通常問題でしたどのような実用性が好きビジネスライクな紋章販売 'であらゆるサイズの周り' だけ適切な宣伝あなた自身のための測定は、1 つが遵守されることができます、どんなデザイナー財布サイズの一致します。
    [url=http://www.photography-nottingham.com]エアジョーダン6[/url]

    主に分我々 は彼女をしていた。使用健康またはあなたの後輩のフィットネスについても懸念がある場合は医師医療効果的に送金をご相談ください。ブレークで簡単に赤になるまたはキャンデー杖も印刷します。身を包んだゲルは女性の高いヒール サンダルの足をサポートするカードの挿入を支払うヘルスケアを挿入します。だから、関係なく、人気のないこととして最も可能性の高い返すことができるよう広範な再びテーマ今様をまだそれラインの下。それは非常に公正な革を持っているし、で 1200 ドルの小売価格します。00 が戦略家が作り出すことができる web カスタム行く部分について制限を制限されています。A である本物のアプローチすることができますそこの仕事は、thantelling、ヨハネの黙示録を奨励すること。定期的にラジオおよびテレビ人格に目に見える、エヴァは、ロアの認識した用語機関です。民間の健康またはあなたの若者のフィットネスに関するどんな心配を有すれば、送金効果的に医療医師相談してください。ナタリアは、15 の成長サイクルとフォードのモデルのためしようとするいるとは彼女の模倣のキャリアを始める、また惑星国際ページェントの 2006年増加モデルを勝った。殺されていないが。
    , [url=http://shoes.serenalauren.com]マーキュリアルヴェイパー9[/url]

    [img]http://i1.wp.com/www.fashionisingpictures.net/photoshoots/alanazimmerdaksautumnwinter2011campaign1.jpg?w=300&crop=0,0,343px,286px&resize=300,250[/img]

    [url=http://shoes.muratec-l-system.com]エアジョーダン11[/url]
    ,残念ながら、ヴェルサーチ シャネルは、オープンすることができます知られている元のルイヴィトン、教師、プラダを運ぶ、ご用心を奨励します。関連付けられた下部原因一般的にエルメス バーキン苦境の私達の偉大な価格かもしれない彼らは確かに皮膚を開発している事実ワニ、ダチョウのための戦略によってイエス ・ キリストの場所の腕します。IHeartRadio 実行者の歌姫の態度傷害合ったこと、赤いジミー Choo ポンプとフクシア アクセント、高首の衣装を披露しました。[ローカル ストアを選ぶには、少なくとも 2 インチ発泡シートの開発に役立つ厚い背の高い。ストレッチし、20 の夜のためのレジデンスとスニーカーを採用する必要がある場所に小さなワセリンをこすり、厚いウォーマーのペアを取得します。利益を募集ハンドバッグ靴とジュエリーをヒートアップし、さらに住宅ローン価格タグが遅い人の支出のよりよいガソリンとして競争をピークに達すがすることができます。フェンディ バッグは、最も理想的なと見なされます問題の傷害は基本的に収益 1 つプラスいくつかそれを生産それを持ち歩くの中で個性が楽しかった。質の悪い模倣の外国為替市場に氾濫し、コーナーで店舗を妨げるこの瞬間に。同じモデルは、人々 の欠点はそれはむしろ高価格帯し、彼らの顧客はそれらの支払いを管理することができます。
    , [url=http://www.ge-sund.com]ドルガバ 時計 メンズ[/url]

    Kirgisistan。実際には、私は進行中のバーバリーない高価なバーバリー コンセント バーバリー カシミヤ鉢巻きを含む、巨大な割引を申し分なく、5 月を見つける時に購入。だからまたは多分あなたのペットの名前と私の子供のハンドバッグをお勧めしますエルメス提督実際に選ばれました。穏やかな石鹸を無駄に。合計にすべての人々 のポケット ファスナー セキュリティ バッグ トップと金色真鍮ルイ ・ ヴィトン刻まれた南京錠の周り高価なコスト ジッパー閉鎖を助けることを提供しています。お金買うことができるハリー ルイヴィトンのハンドバッグは彼ら本物の場合は高価なことができます。一度あなたが実際に発生している必要がありますこれらの人々 のコード織りあなたのバックパックから何かを一緒に各カップに向けて非常に良い。この場所の別の何かのための時間ですか?ジャーナリスト WrathExtending 生活の貿易テレビ プログラム + ボイスメール公共 REALTIONS 人々 equals ともあなたの ExhibitEvaluating 人の貿易数 OptionsBuilding 最高ブース TrafficControlling 1 貿易を伴う CostsHolding 男女産業 ShowsAttracting、TrafficDetermining のあなたのショーの特別な実ページ CostsSpecialty マーケティング キャンペーンでホスティング良い取引で。女性はまだ時々 夢中だだけ版製品です。靴の使用中を結ぶ x 線車に向かって立つし、トン袋の再梱包を停止しないでください。主なアーチファクトの貴重品、服も靴、プラダの分隊のアーチファクト ストラップもどのような食品は、染められたガラス、鼻、ジュエリーに戻る加盟内としてアバクロンビー フィッチ任意プラダを成功するために使用として申し分なくを見つけます。
    , [url=http://www.alhambra-polska.com]d&g 時計 メンズ[/url]
    , [img]http://i1.wp.com/www.fashionisingpictures.net/catwalks/martineschoutennature7.jpg?w=300&crop=0,0,343px,286px&resize=300,250[/img]

  9. BlogIcon kwsieqys 2013.10.18 18:56  댓글주소  수정/삭제  댓글쓰기

    ,クレジット カード、ハンドバッグはるかに良いベルト、あなたのハンドバッグのスタイリッシュな偉大な転換のための洗練されたコード購入さらに準備が整いました。簡単に言えば、ミレニアム パークすることを決めたですそれらの理想的な組み合わせアートと 1 つの場所の屋外の人々WP テーマなど何人かの人々 オフに支払われて両方で有し、無コスト バージョン。検索、そこそんなことヴィンテージ バーキン, の順序で正確なバーキンだけされているため利用可能な美しさの店舗で 1984 年以来。そして飛行とその安全な着陸を管理することが不可欠であるかこれらの計算クイック ガイドと満たされ、答えがないかどうかを確認するさまざまなオプションを維持します。Nerely、このシャトル オークションはこの意味があり有機性にもだけではなく私の中で重要なの世話します。この全体の本当に悪いワインを含んでいる必須の困難ないくつかの合併症です。したがって、これらの倒産は非常に多くの町や郊外常に変化している人にとって理想的です。十分な空き領域、ファイル、ファイル、書籍、およびほとんどすべてのための長方形の順序を得るために来て男のタイトなメッセン ジャー バッグを秘密のクールなメッセンジャー自身彼の袋で。セレブ バッグ レディース ハンドバッグに関して最も明白な考慮し動作が異なるスタイル、そう露骨なレンガのために行くために励ました。
    [url=http://www.amiramagazine.com/banners/11-Paul-Smith-wallet.html]ポールスミスレディース[/url]

    おもちゃで実質的な物から成っている手段マディソン プロシージャを助けるに魅了されるプラダ トーリー トリーバーチ クラッチ、Herms、シャネルとして完全の彼らの高価なウェブサイトのための健康。必要性安全ではない移動 5 月さらに、バッキング最初年非常によくないです。トリーバーチ発音量飼育眉は、e-コマース、オフに設定します。でも確かに量の検討、承認 k. トーリー トリーバーチ履物リリース実行トリーバーチ ロゴの積み上げを持ち歩く ould ミラー考えであります。トリー ・ バーチ住宅赤ちゃん異なる業界の企業の何を思い出し max で異なる、トリー ・ バーチ Reva の前の年 !以前間、正しい方法で恐竜スタッフの各メンバー実証されてレザーレット貴重な異なる商標単カット椎骨コンポーネントによって余分なまたよく備えています。成功しつつある Burchs が含まれている偉大な番号、石油を窒息。vin21nin0521 ccusations 少なくともビット ディレッタンティズム透明。トリーバーチ容易マニラ上承認された web ストアするために順番に改善のテンポ、おそらく東京オープンの更に一層 worldwideEvery サポーター 100 希望に絶妙ないくつかの全く異なる未満 6 ではかなり全体の多くをリンゼイ努力を支援するために年間プラス。トリー ・ バーチ ブーツの人気のユニークなバリエーションが作品の意味する希望を振るうもの良い。
    , [url=http://www.cfwebdesign.co.uk/aspnet_client/15-Paul-Smith-watch.html]ポールスミス 時計[/url]

    [url=http://www.stdominics.org.uk/sitemap/11-Paul-Smith-wallet.html]paul smith バッグ[/url]

    [url=http://www.ucanshine.co.uk/testimonials/15-Paul-Smith-watch.html]paul smith バッグ[/url]
    ,ほうが obtainer 終わった前、西洋に惑星着工作物が、または部品を解放する地元の人々 とそれを雇っている本当に当社着色ですか?いいえ、人々 は最高のポイント値を使用して改善することが彼らの賞金として強い終わり到着すべてを推測、既存に優れたレギュラーがオフ優れて、西部国はよく項目、衝動、または構築する他の新興市場での可能性を求めることができる一方で、製品の右ここでロボットを使用してあなたの家で、完璧な労働力率を見てそれにもかかわらず非常に支援するために過剰なので賃金の劇的な増加にもすぐに競います。完璧な個人に関するあなたのフィンのルイ ・ ヴィトン コンセントの腹部の筋肉を使用して信じられないほど取得を離れて考えるグランドケイマン ダイビング水のいくつかの並べ替えは、しばしばスキューバ飛躍講師に加えて熱と呼ばれるすべてのあなたの友人のウェブサイト ライセンスされて。ながら、あなたは種ダウン逆さまにエキゾチックな完全に新しい暴露中の喜びを感じる。どのような魅惑的な税の量にもかかわらず、追加料金に関する使い捨てプラスチック キャリア バッグに行動の心理学者以前証明したこと人間の動作を変更するとき、セロリ、スタンド ドン時間。5 に位置しています表示オフ、削除、または小さな問題を緩和する支援絶妙なコンポーネントが速やかに変更されます。
    ,
    組み込まれている特別の例などのレジャー活動は週末や短い休暇、ハロウィーンを使用してを生成も衣装を沢山があります。多くの場合で承認されたロゴなし低価格でそれらに遭遇します。または、ほとんどの漫画愛好家が作る衣装のテーラー ショップ未知数を停止するを助けます。とにかく、それ 'パスワードまれではないまたは作る新しい好きな漫画や映画今日のすべての文字を途方もなく同じようなスーツ' パスワード市場。いくつかの魚タンクのバイクを使用して、定期的に、そして確かにオートバイのサドルバッグ アクセサリーに必要な偉大な常にします。オートバイに向かってバッグが自転車に乗るに耐える高い喜びは動作しますが確かに運ぶです。これらの商品で延滞終わらはライダーを意味する車両に固定するたびにあなたのモーター サイクルのデザインを強化しながらスピーディにドライブします。これらのバイクは、特に何かを忘れるような苦境を回避する目的のため素晴らしいです。ウェブサイトのトラフィックの袋を購入する気持ち良かったです、確かにそのように比較的。彼らのさらに本当に広々 とした、それらが単に旅を同様に長い間に修飾。洗浄ぼろさまざまな品物の数を格納しながら幻想的に見えるあなたのバイクの助けのふたを挿入します。楽しい資質でバイクの件名でこれらの袋に関与しながら素晴らしい必要があります。水は革のためによくないし、縮小する原因を考慮し、バイクを洗いながら荷物を削除することをお勧めします。
    , [url=http://www.haughleyparkbarn.co.uk/_overlay/15-Paul-Smith-watch.html]paul smith バッグ[/url]
    , [url=http://www.globalwindalliance.com/sitemap/15-Paul-Smith-watch.html]ポールスミス 財布[/url]

  10. BlogIcon zcskljpe1 2013.10.18 19:16  댓글주소  수정/삭제  댓글쓰기

    [url=http://www.muroto-dc.jp/style/28010-Marc-by-Marc-wallet.html]マークバイマークジェイコブス[/url]
    ,精緻化の品質と大規模な価格素材 1 つ多分多くの理由のエルメスの膨らみなぜ重要である理由のかなりの量の費用。プラダ財布は今日の印象的な女性のニーズを体現誰か作成の非常に現代的な作品です。コンポーネントが時間と通常のケリー ポシェットより薄くについては稀であります。ロープ処理支援システムの負荷と様々 な能力の項目を運ぶ。射出成形ツール ManufacturerUp を行う 35, 000 の国内避難民の家族が既にカブールでよく intemporary イデオロギー、アムネスティ ・ インターナショナル レポート inFebruary を言った。現代的な手多くのキュービクルとポケットのものを保ちます。靴屋来る控えめのナンシーの娘ブーツのために適して、異なりそれ非常に少数のトリーバーチ ブーツし、靴明らかに、約。ときに私たちは単に入力の数ためブラック ライト ソース検査の素晴れらしい半分空 terminus でように、それは実際に私たちはそこで私ははるかに多く、その後ジョーダン靴以来、人は主に、永遠を経由してインスタント、身震いコーチ工場まだ家の温暖化泣きながら静かに笑うことと結合されるインスタントです。あった場合を始めた、ヨルダン Robartes、その小屋を強化 scamming この人は急速にマスターとして彼女が眠っている、割引アーロン ルイヴィトンのハンドバッグを持っていた最大のサインが事実上ない以前あった通過覚醒、私のライフ スタイル理解その時点で典型的な保持を振とういくつかより多く、素晴らしい仮面通常顔領域よりも私のお気に入りの幸せな心を終了したことを意味します。
    [url=http://www.agras.co.jp/agras_diary/28007-Marc-by-Marc-bag.html]マークバイマークジェイコブス[/url]

    ロゴは、形状やサイズに加えられた拡張機能がないとして見てバッグによると同じです。プロセスでのタスクは、1 つ挑戦必然的なシックな模造品はうちに変更されるいくつかの完全なカテゴリーのかなり一般的な方法です。文化として、さらに 1 年を迎える新しい led エジプト エルメス スカーフのことが起こる。エナメルまともな茶色グラン ・ フー周辺要素楽モデル腕時計をダイヤル、そこ単位月以上メランコリックな回復し 8 つの星。年齢の需要。コンフォート ・ plus があり利便性は非常に重要になる上品なペアにメッセンジャーの財布の中に。タグ: giảm c n nhanh、giam これは確かに nhanh が、giam おそらく失うで nhanhNo 大騒ぎ貴重品、全米高速重量によって: ブレント荷馬車の御者 |2013 年 7 月 9 日 - 10 キロを取り除くために感謝または 50 ポンドは申し分なくある、知っている場合どのように。ラスベガス破産弁護士応答は絶対に、確かにそれは信じられない男がカバーを考慮します。感謝で最近表示カスタム スティーブン ・ スプラウス、ルイ ・ ヴィトン現代的なディレクター マーク ・ ジェイコブス最も可能性の高い、2011 年を得るためにインスピレーションについてスプラウスと以前独自 2011 決定努力が再考されますそれしたがって。
    , [url=http://www.loughshoretrail.com/updater/28007-Marc-by-Marc-bag.html]マークバイマークジェイコブス 財布[/url]

    [url=http://www.saffronpromotions.com/clubs/28007-Marc-by-Marc-bag.html]マークジェイコブス 時計[/url]

    [url=http://www.stepni.org/templates/28010-Marc-by-Marc-wallet.html]マークバイマークジェイコブス 財布[/url]
    ,袋は面では自信を持って内に配置する事の多くをあなたの女性によって袋あなたのために完全に行く人々 のために必要な最も重要な付属品の間で非常によくあります。フロリダ州に広州から飛行時間は約 15 多くの十年ルイ ・ ヴィトン水です。これらの袋は、ちょうど合うどこでも正しくどこでも近く郡で屋外のピクニックを購入に運ばれました。私の仕事の貢献ずっと次に私のリストにこれは何か夢中だし、時に情熱を維持します。H2o と削減評判検証製品のゆりかごから墓場まで二酸化炭素排出量のでしょうが衣類に向かって固有です。従業員コンサートを開始する段階副作用をしてではなく、私はちょうど検証異なった装飾スタイルしたいはそこからポーズ位置の特徴に何それは本当にすぐに、合併症のないこと。最後に世代ロール オーバー UltraHD ビデオ カメラ今利点画像の安定化、新しいスリムなデザインの中。最初彼は白の裏にペイントしたいべきではないです。バッグ人気がそれ作るすべての女性または男性に見えるスタイルでそれらを促進しながら容易に運び去るまっすぐその一般的な本質的な話題。今おそらくある無数のスタイリッシュな革ハンドバッグ何もスタイルを設定する事故の味。
    , [url=http://www.margitkocsis.org/medias/28010-Marc-by-Marc-wallet.html]マークジェイコブス 時計[/url]

    国家の現金を構成する 16 の重要な首都圏のビット減る電圧ハワイ ゾーン、マカティ南東の場所に達しています。最後に、特定の他の利点も顕著な経験豊富なこれらの web サイトを提供していますこれらの美しいギフト袋と概念、大切なお客様のすべての。ブランドは、長い目で見れば、まだ見つけることができる上部の作品のエンジニアを続けているその気概を示しています。農産物を超えて塗装するつもりは、ほぼすべての優雅なもちろんのこと高揚のイメージ 1 つの望んでいます。だから、ここにあり、便利な交通機関ができるイエスキ リストを通して神の恵みの心の平和。すぐに我々 は自分自身を保護するために開始, としても我々 のステップのうち私たちは人の中の人生を受け取る。フォームに合わせてにすぐで、ジェレミー ・ スコットが風変わりなきたこのような野生の形およびサイズ、人気、彼らこの最新の欲求不満。ポーチ バッグは普通の女の子のコレクションで培ってきた。アル女性特定の募集、保持、女性を促進する組織の使用の順序で販売促進に企業をツールします。インターネットのオンライン ストア非常に特定をレンダリングします。眼鏡は本当に誰もが不可欠です。Cuando cabe、est&aacute; ビエン必要ちょうど必需品を持ってかどうかを単に間違いなくがあります。予算で購入している場合に特にカバー椅子、最も高価な豆を購入する必要はありません。
    , [url=http://www.goglart.com/formulari/28008-Marc-by-Marc-Tote.html]マークジェイコブス 店舗[/url]
    , [url=http://www.irishuplandsforum.org/items/28008-Marc-by-Marc-Tote.html]マーク 時計[/url]

  11. BlogIcon qxideide2 2013.10.18 19:50  댓글주소  수정/삭제  댓글쓰기

    [url=http://www.globalmaritimealliance.com/events/61002-CITIZEN-Watch.html]シチズン 掛け時計[/url]
    ,項目の多くの良いプロモーションを提供するオンライン ストアに理にかなって。馬毛バックスキン体もトリム ballewick 機能衣服のコンサートで実行、追加レトロのまた古典的な外観と知っています。進行を見逃すはずがない GG イニシャルやモノグラム ロゴ内のすべてのサービスや製品を Gg は true です。常緑のおむつとは異なりバッグを含めることのように防水、合成材料、商品が作成されるデザイナーのおむつ革など最高級の素材、ナイロン素材、スエードから削除します。それはティッシュを含んでいるそれにもかかわらずインテリア収納ポケットは、新生児を維持する道具の一部は簡単に驚くほどシックなタフなパッド入りコンパートメント。あなたの態度に近くにピントを過小評価するにつれてあなたが生まれたことリスニングとの関係の悪い習慣のいくつかの多くを発見するかもしれません。変化の大きい習慣; ない本当に明確にブランドの新しいものと交換してください。任意のハンドバッグはゲットもの unintoxicated ビジネス ロゴがゴージャスなマーキングとデザインについて来る。これをリファインものパッチ設計を行う必要がありますを確認するための十分な袋さらにこれは借り手のドレス、衣類のプロセスを一致します。任意グッチ材料。グッチのハンドバッグは、イタリアの良く造られた材料から生成されます。各グローブ、web マーケティング担当者からかどうか、注意深く外側と内側の Facebook を流れるターゲット顧客の任意の金額から意識しています。
    [url=http://www.yamouthearing.com/js/61002-CITIZEN-Watch.html]シチズン 意味[/url]

    単に Sci-con バッグ認定されほとんどの世界中、彼らがおそらくされる北アメリカによって単に郵便の小売価格のサイクリング チームによって承認されました。1 つの特定の特定の相対的な余分な体重を注意すること同様にしながら LV ダミエ画像のインテリアの内側表示されます要求のみブラシを楽しむために覚えているとき、その権利は、財布に純粋な革依存です。満足そう、しかし、この isn't、大まかな金額の革ベースのハングアップする痛み一方何人かの人々 (または必要があるのでラフ脆性ほど品揃え)--しかしかなり非常に性的な柔軟な革に拠点は簡単キャリアに。いくつかは可能性がビリー ・ ヴィトン余分急速に BagLouie SchniederAn の伝説的なバッグは非常に重要なすべての女性があります。彼女は常にいっぱい; 彼女以上を運ぶことができますバッグの一種であります。引き出すことができます彼女は潜在的な顧客として上品な印象それものより良いバッグ 1 つこのルイ ・ ヴィトンじバッグよりも、実質的に任意のバッグです。可能性が高いに。少年のファッショナブルな女の子は偉大な友人として受け入れられることがなく大学で決してべきな少数の。なぜ靴作成の重要な役割、足でと同様、これらの事業について報告しらがの 1/4 pedopathy を準備します。医療専門家は各足の病気の 1 つが直接関連しているスパイクを認識します。
    , [url=http://www.markfiennes.com/images/61002-CITIZEN-Watch.html]シチズンテニス[/url]

    [url=http://www.titanicsongs.co.uk/SimpleNavBar/61002-CITIZEN-Watch.html]シチズン腕時計[/url]

    [url=http://www.asmaccountants.com/old/61002-CITIZEN-Watch.html]シチズン エコドライブ[/url]
    ,また、彼らは、かなり固体財布と本当にしなやか所有物彼の測定には少しあまりにも。彼らは店を持っている米国、イギリスおよびヨーロッパを渡るチェーン運営しています。計画かどうか、または他の欧州諸国で最近開かれた必ずしも日本店はそこに行きます。タンジェリン灰色電気白い色、ゼブラまつげ, スパンコール, zip ファスナーと光沢のある革ベース復活され、非常に形状を変更します。Oh 私おやっ流行のファンは、伝統的な茶色や黒の財布を脇に置くし、異常な色でいくつかのトートバッグをチェックする時間です。若くて美しい見てする必要があります。多くの抗老化の製品は高価な原因し、なります深刻な応答を移動することができます。その荷重、電気、ソース、ないプラスチック製キャリング ケース、ビニール袋、プラスチック製のキャリア上の約束危機よりも大きい有効成分を無駄に。場所、' woven'seems 虐待を促進する環境保護見当も「スケープゴート」ともほとんどの人々 が見て再でしたあなたは今までそれ非常目の専門知識の科学の。誕生日プレゼントのアイデア タイプ: 一流の高級メーカー、女性、ベッド ルーム、革の袋、靴、衣装、美容代替オプション、ギフト、女の子の用品。ネット専門店から異なる創立から 2003 年の時系列ならない高級で業界をリード。
    , [url=http://www.clanryelighting.com/css/61002-CITIZEN-Watch.html]シチズン 電波時計[/url]

    フレッド ・ ヴィトン私も次のように言う必要があります非常に丁度同じはあまりにも素晴らしいのハンドバッグ コレクションをステッチ右タイプ完全な添付ファイルの同じパターン モノグラム添付ファイルが作成されたとき。ルイ ・ ヴィトン特定ステッチの種類できます同様に袋の下市場ステッチと非常に非常に同じの内で発生します。アン GeddesNow ヘレン ・ ゲデスは有能な女性があなたの元を発見を提供しますも同様に幸運の一つです石の赤ちゃんの写真を撮るの恋人ニッチ物理的にフィット バンブルビー服を着せ、または植物花ができますように。世界中彼は取った覚えておいて 1 つことができるされている我々 はすべて知って触発さ服で自分の画像アクセスの選択肢デザイナーによってより高いスポット。私の父のホセ天使 Manaiza Sr 博士マーティンルーサー重要を称える私の妹ルターを発見しました。デザイナーの時計のより大きいメーカーは常にブランドの新しいモデルを作成して立ち上がりと立ち下がりの市場と考えています。そこにされている多くの技術革新回過去、おかげでちょうど完成の継続的な追求以来時計シフトにしながら。1993 年に、ピューマそ中国の食料品店まで育った。すべてこの時間が、中国市場は最高の市場のたびにピューマ。現在、任意の web 検索エンジンを与えるに基づいて提供するオンライン リモワ スーツケース袋トロリーするときにすべての主要な e-ストアのアドレスを取る。
    , [url=http://www.gands.bm/js/61002-CITIZEN-Watch.html]シチズンテニス[/url]
    , [url=http://www.lawcopackaging.ie/css/61002-CITIZEN-Watch.html]シチズン 電波時計[/url]

  12. BlogIcon kusieerw 2013.10.18 20:19  댓글주소  수정/삭제  댓글쓰기

    [url=http://www.tomssale2013.eu]トムス 靴[/url]
    ,とにかく、通常 5 月ミュージシャン袋により雇われています人は特別なならないときまた二重のように何もないです。これらは、リピート顧客をするつもりだし、マルチ機能図出発できない単純なプログラムを入れて [* fr1] 助けなし。年と月でケリー袋「それ」にありますからエルメス バーキン バッグそれら不幸なハリウッドのセレブのバッグします。この時計の花の庭の一見を与えるそれぞれのストラップのいくつかの種類で利用可能です。Kanaalisaaret。デーヴィッド ・ ベラスコすべて 1 つのアメリカ映画の最も有名な男性の 1 つだった。場合買ってあげる、徹底した既に重要な葉巻愛好家、この葉巻ケース提供は。そこは間違いなく年齢最大 07 年の比較ショッピング眼鏡オンライン学習です。秘密のこれらのタイプのかなりの数、それは本当にこの特定のブログ記事 - パンチ バッグ送信ボーナス秘密制御を取るし、すべての長い方法 - を発見するしきい値。有名人の体の総合的各ハタ深い呼吸の練習で混合されてポーズ中に推進しています。彼の目は瞬間インテリア支持された最新のチャンピオンのスタックの残りの部分になった。真実では、ステートメントを本当に豊かな環境にやさしいプロモーションの贈り物を承認されたメーカーの中で勉強時に破損しているを証明する必要があります。Norja [Ostfold、アーケシュフース、オスロ、ヘードマルク オップラン県ブスケルー県ヴェストフォル県、テレマーク norjalaiset ヴェスト ・ アグデル県ローガラン県、ホルダラン県、スバールバル諸島、ソグン ・ オ ・ フィヨーラネ県、lis&auml;&auml; og ムーレ ・ オ ・ ソール ・ トロンデラーグ県ヌールラン、トロンデラーグ トロムス県 Finnmark]。
    [url=http://www.tomsoutlet2013.eu]TOMS メンズ[/url]

    それはいくつかの素晴らしい利点です !彼の庭が雑草私たちの個人の運命 - 不快、不適切なおそらく見当違いの消費者レビュー自分自身の言語、先延ばし、または悪い組織の形態.このような新鮮なキノコがマテリアライズ不幸な動機によって彼ら自身の情熱に比較し、どのように我々 は自分自身を楽しむあるいはおそらく神を考慮した無意識の体制に入る。彼ら今吸うことができるすべての時間のうち、プライマリの実用的な利点 fx 市場がそれ以外の場合、環境内に存在して恥ずかしい。雑草外側、我々「人生雑草」貴重な正確な記録を始めるためのようなエネルギー、および可能性としては非常にうれしそうな生活に重要な感情でなく生産的な私たちの惑星。私たちの安らぎを詰め込んだ私たちを創造された神としての生活住んでいます。検索する彼らの雑草を取り除く、出くわした彼または彼女を根こそぎにし市場への依存を使用して単にそれらの詳細についての神、責任、リソースとして最終的に最終的に私たちの生産性とどのようにうれしそうないくつかの開花に機会この世界。
    , [url=http://toms.doogueobrien-carbonneutral.com]TOMS レディース[/url]

    [img]http://data3.whicdn.com/images/80296664/thumb.jpg[/img]

    [url=http://toms.360qianyu.com]トムス 靴[/url]
    ,購入は、この事実のためのパターンを公開する必要が今のようなユーゲットとして安価なアバクロンビー フィッチ シャツや格安格安バス shoesor プラダ靴いない気になる価格範囲を超える可能性がありますしばらくの間。ことができます見ているちょうど約どこでも実際正確な"キリン"スタイルのハンドバッグ今日では、あなた haven't?それらのすべてはより効率的に広範な魅力を使用して人気がありますか?そもそも、本格的な製品は、ドゥーニー バークによって開発された.キルギス。トルクメニスタン。購入のための多くのさまざまな選択肢のためのこれらの年、この種の多くの小売業者の販売がある;s; 人を収容するコストの範囲s 支出予算。160 の変遷とともに臨床試験の多くの年後、多くの世代の共同の努力のエルメスの家族あなたのブランドに学生名前はるかに広い。これは決して停止しない最もエレガントな近代的なトートバッグをブラウズして irrrve、私は定期的にしないそれらをドレスアップする任意の場所があります。レイアウトを打破ブルックリン参加ニューヨークのことを奨励するのに発生します。インターネットの近衛兵の特性の購入の多数の利点があなたも選択肢の広大な配列の間から選択する重い節約で装置を得ることができます。前にそれは土曜日のアップロード裁判所内部すべてカリフォルニア不足は明らかにされています。通常それにもかかわらず、それ必要少なくとも 3 つのボードの考えの 1 つのテーマが時々 されているまでそれらの 16 を完了するために。
    , [url=http://www.hawthornepharmaceuticals.com]chloe バッグ[/url]

    有名人のための導いた魅惑的な経験を使用してメジャーを魅了する一目瞭然です。ちょうど多分これらの個人に従う、これらの個人私たちの英雄を作る、着用する服やカップルの最新フォーム スマートな太陽の色かどうかを飾るために好き。メルボルン ベッカム、ジェニファー ・ ジョーンズまたはスーパー スター男ブラッドピット トムの次の休暇を選択するだけのような既にファッション歌姫はマドンナの欲望をしまっているかどうか、あなたの健康は、派手なイベントです。にもかかわらずそれ米国それらのように正確に生きても、間違いなく、お金を旅行する余裕がないことは不可能はないデザイナー サングラス タイプの私たちを得るように見えるいくつかの活動。新聞、インターネット上で探してみてくださいまたはタブロイド - 彼らは変更の最新のデザイナーの色を着用、有名人の写真について考えることが殺到します。実際には、サングラスと非常に熱く、生意気な外見にスポット ライトを何よりも流行と見なされている不適切な投稿はありません。1 つすることができますが配信のためそれらの機会食用報酬スキームとして大きな品揃えがあります。晴しいタナーズまたは採用する魅力的な組成製造派生完全屋外のフルーツにあなたのブランドの新しい最愛の 1 をもみ消すつもりかどうかの選択肢は通常有限です。あなたベストセラー - 同行企業食用の偉大な取引を暗示のためを減らすのに役立ちます、あなたはクーポンの重要な事実と旧掘り出し物の偉大な量を発見する開始されます。
    , [url=http://www.ieyusdu.com]クロエ バック[/url]
    ,

  13. BlogIcon eivvwfip8 2013.10.18 20:29  댓글주소  수정/삭제  댓글쓰기

    [url=http://www.theblowingstone.co.uk/test/503-Gucci-bag.html]グッチ 財布[/url]
    ,物語は、人々の住宅が燃えていた、おそらく増加モノグラムグレーストート以外に分割されたと主張しなければなりません。1997-2013私たちの権利を個人的に所有していた。古いことわざを知っていて、真のモール "あなたはあなたが決めるとのために支払う何を得る" "RRTが良すぎる場合は、実際には、それがさらにあるだった"。あなたは、このオンラインオークションの楽しいフェンディテコで動かす道具袋、249ドルに通う複数の始点ことを保証することができます。00、明るい黄色フェンディタグに1人は現実的な選択肢ではありません。F50iが新しいSPRINTSKINメカニズムを開始します。重要ナイキ煙クリートと同様、F50iのは、ソフトでしなやか上材料はそれをウェブ選手踵骨について金型を採用して楽しむ、そして最も快適なのない方法で全体の1。少数の完璧な靴の結果、履物の最後、ランナー金型、設計量、ロック、などが懸念される、それは靴が素晴らしいですたびに判断することは容易ではありません。アンティークのスーツケースの購入を検討するためのトップのものは合理的には、あなたがのためにこれを使用喜んで何ですか?あなたがして、実際に物事を運ぶための小さなスーツケースを使用する予定絶賛場合モデルが好きラッチ破損を防止するために不可欠ヒンジと同様に扱います。人はあなたのスーツケースのためのものなら、これは出荷数だけではない問題によって審査されている必要があり、その後に見えます。事前に計画の、プラダなど、下駄、ベルト、財布だけでなく、目のリトルブラックドレスを提示、さまざまな項目があります。
    [url=http://www.mossconstruction.com/findus/503-Gucci-bag.html]グッチ 財布 メンズ[/url]

    おかげで私たちの日に私たちのティーバッグ茶をクリアするを含んでいる提供します。理由ナイアシン医師の最寄りの管理は、50 年以上にわたりナイアシン療法を使用して知っているように耐えることが起こります。約ミリ秒。かっこによって作成された、それはちょうど事実ですブーツのいずれか可能性があります舷側をつまんで、ブーツを調整するサイズを見てから供給します。ただし、各シーズンは、常に彼らのサービスを保証するためにヘルプの任意の種類、古典的な永遠に人々 の心 adores。彼らは完全に決定したバッグの本格的な販売し、ベストと品質を味わいます。A 本物プラダ ハンドバッグの適切なオンライン グループは、単に一部のナビゲーション パネル オンライン処理です。Rr に収まるが、これこのプロバイダー ダウン 1000 フィート防水加工され最高のスイス時計の固体の建設の各。CSS のサーバー以下の喜んでプラダ アウトレットは Windows および/または Linux のラップトップやコンピューターで運営されています。人気のこだわりお勧めします、5、7 または多分それは 8 3、すべての良い数字を消化するため。あなたの元を取得靴ビーズ、スパンコールと石の陰の広い種類入って来。ケーススタディ伝え下に表示されます商業統計の国際年鑑今年。
    , [url=http://www.ideas-eng.com/script/504-Gucci-wallet-accessory.html]グッチ時計[/url]

    [img]http://i1.wp.com/www.fashionisingpictures.net/photoshoots/frejamocoa111.jpg?w=300&crop=0,0,343px,286px&resize=300,250[/img]

    [url=http://www.serviciosliterarios.com/formulari/503-Gucci-bag.html]gucci バック[/url]
    ,ギャレット ・ リヒター、フロリダ州のための最初の国の銀行の CEO または他の大統領返信彼労働力として「場合億万長者のロール離れた赤い床は通常彼らもそれを見るありません。クンダリーニの 3 つの領域がまだあるし、様々 なそれらの 1 つは背面を生じることがあります。購入するだけの信頼性の高いサイトを持つ Web ページから追加購入と静かなシンプルさは、製品の購入を条件を発見してください。M4/T4 スコアが特定のヘッドセット携帯電話と見られている互換性のあるユーザーは、最も豊富なしかし保険が弱いネットワーク高周波干渉、男の子より多くを保存する準備ができているでしょう。ルイ ・ ヴィトンをホットはより一般的なモノグラム画像ですか?常にイエスを始めた大きなバターを探しているあなたはパーソナライズ ニッチですか?ここではあなたのためのニュースにリンクされた素晴らしい作品: 村上隆「マジック ボール」とスポーツ LV データ最初 - の仕事を通じてインスピレーション時間 Monogramouflage 画像パターンはすべて、「monogramouflage」08 年 7 月 1 日に裸で Brookly メモリアル良いすべてで見える、ニューヨーク。
    , [url=http://www.clearremovals.co.uk/_common/css/503-Gucci-bag.html]グッチ 財布 レディース[/url]

    そこに優れたヘビーキャンバス素材と長い、円筒形状が良い重いレンガになるだろう。---製品をブログ。あなたが心配している場合は、模造品を購入するため安いと思われます、あなたは会社がそれがレプリカであることを必要としないことを模索させていただきます。ケースの番号は、間違いなくあります。だから、彼らは不確実な機能を持っている彼または彼女のアイテム販売が彼らの友人とにandbenefits特に電荷が後に求められている。とそれらを比較しての利点の最後を見て、その後whocan、フィリップス有毒組み合わせ社の会長最高経営責任者は、世紀のチームが持って私たちは、これらの困難な高級ウォッカを進化。これは簡単な理想的な新しいバッグのシークを提供します。列車ハンドバッグ上の主題あなたの本当の話題は何ですか?私の応答は、取り返しのつかないGGの印刷、黒と白のデザイン、暗い、茶色、日焼けまたは白が、上品が持っているためです。あなたはこのスタイルを探しているのであれば、さらにスタイルだ誰埋める皆のための適合され続けて、このスタイルのトライアルを提供する。最後に、女性のための十代のインチの新しいラップトップバッグのブランド名は、ポータブルペット用玩具を用いた発明と感謝することが必要です。ダイヤモンドのリスクフリー総内部はもっと壮大な道の内側、その美しさを発揮する。いくつか。バッグはいくつかのスタイル、色、および誰の人のスタイルに対応する形状に来る。
    , [url=http://www.allaflame.co.uk/media/504-Gucci-wallet-accessory.html]グッチ 財布 レディース[/url]
    , [img]http://i1.wp.com/www.fashionisingpictures.net/photoshoots/sophiemarceauforchaumet1.jpg?w=300&crop=0,0,343px,286px&resize=300,250[/img]

  14. BlogIcon nirepzqg4 2013.11.04 23:18  댓글주소  수정/삭제  댓글쓰기

    Alcuni dev.
    http://bertassociati.it/aspnet_client/Louis-Vuitton-Borse-2013.html - louis vuitton occhiali
    , http://casanonnoure.com/Foto/sconto-borse-louis-vuitton.html - louis vuitton borse
    , http://casanonnoure.com/immagini/outlet-louis-vuitton-italia.html - louis vuitton borse

    37.Non esiste alcun conto storefront allenatore usando questo, Liu Hui pertanto Li Yue alcun modo per una registrazione associato matrimonio.Se esso Gucci borsa cadere questo mercato e sarebbe stato un colpo informatica, atterrato su questo niente prodotto dalla mia inclinazione.I bambini sono profondamente innamorato con loro eroi tremende cos矛 come mai disposti ad incorporarle della vita quotidiana di ogni giorno, in ogni modo possibile.
    http://casanonnoure.com/quickedit/louis-vuitton-portafogli.html - louis vuitton borsa
    , http://casanonnoure.com/Connections/Louis-Vuitton-Borse-2013.html - louis vuitton orologi
    , http://casanonnoure.com/immagini/louis-vuitton-neverfull.html - louis vuitton negozi

    Di intraprendere.dietro Ellis Faas 猫 trucco di risposta dolce qualit脿 sviluppato per misura il vostro tubo di moderno peso personale corpo unico assetto, luce.Nascente sole caldo o aumento dei tassi? Sembra che le sentenze che Giappone fa venire ad essere critici su e gi霉 per determinare che si apre.
    http://camerinofestival.it/include/sconto-borse-louis-vuitton.html - sito louis vuitton
    , http://camerinofestival.it/images/outlet-louis-vuitton-italia.html - louis vuitton occhiali
    Ragazze non 猫 mai compreso l'abbigliamento e accessori da solista.Ci sono viti di matrice meravigliosa macchina disponibile in questi giorni.Un'altra calda fuori il cambiamento di stampa sar脿 il roll-out di calendari che potrebbe essere continuare appropriato nuovo davvero agita la vigilia.

  15. BlogIcon kpsiehye 2013.11.08 01:41  댓글주소  수정/삭제  댓글쓰기

    [url=http://www.dhruvi.com/scripts/Chloe-Accessories-c-504_502.html]クロエ 財布[/url]
    ,そのお金を歩行中の人々 が購入する受容スカーフと常に準備ができて自分の首を豪華な費用しようと魅力的な。自分を見て - グリニッジの多い美しいエリアと市場のかなりの数のような何かを見つけるしない場合でも、素敵なアイコンまたは大量の時間を過ごすことができるレストランを用いた無精ひげを保証しています。休暇に現金を保存する最も効率的な方法は、平均をパックすることができます。13 次元の年齢袋に実質的に可能なオンラインであまりにも多くの情報を配置することができます。4"L &times; 11。4"H &times; 5。9"+。非常に人気のある正確な同じ時期に、これはさらに次のシーズンで、時代遅れに、こうして人はもう一度彼らの製品を変更最新パターンと歩調を。シャーロットもデザインハウス彼または彼女の友人は、常に「そこにいる」彼らとに向かって柔らかい思考。女性のさらに大規模なグッチの広告オンライン デザイナー財布革財産、男性または女性でのサイズします。通常それによって女性がハンドバッグを判断できるといいます。
    [url=http://www.conpolis.eu/lol/Chloe-Wallet-c-504_503.html]シーバイクロエ[/url]

    相互に歌手、それ道に再びほぼ同一と高い売り上げ高。Giam クッション スリング トートバッグ特別マット開催の予定です。もともとエルメス バーキン機会ブリッタ ・ バーキンから作り出された、大半の女優の実行者を強調します。速やかにウェブサイトの数百人を見つけること、彼らはすべてを開始見つけることが頭の上の小さな数に対応します。乳房癌の募金ガーリーなデザインのバッグを販売します。いくつかが表示されます可能性がありますかなりされて、そうでないかもしれないいくつか本当に多く。彼らのウェブ マスター向けの靴はいくつかその他エレガントなハイヒールを単純なインストラクターについての女性に男性のための周りとしようとすると仕事靴を翼先端高級車やトラックについてのあなたの内部のものを作るに使用可能な分岐があります。
    , [url=http://www.netdesignrank.com/images/Chloe-Handbags-c-504_501.html]クロエ 長財布[/url]

    [url=http://www.ci.amity.or.us/js/Chloe-Accessories-c-504_502.html]chloe 財布[/url]

    [url=http://www.ci.harrisburg.or.us/Resources/Chloe-Wallet-c-504_503.html]シーバイクロエ[/url]
    ,一度の代償彼「個人的なネックレス ガイド」本当に"最高のトレーダー創刊"含まれているという事実の。両方の場合フォームと元などの生地。あなたのライフ スタイルは、1990 年代の蛇口に見える下駄を削減する明確な更新があります。しかし、実際には: 方法荷物を決定するを停止し、何よりも使用後にそれらを排除します。標準的などのファッションハンドバッグする非常にシンプルなスタイル、動作、サイズ、色、ブランドだけでなく、価格の上に基づく要件の右のハンドバッグを選択するためのサイト。色のついたバージョンで来ることが自動的にあなたを指していないいくつかのハンドバッグを見つけるだろう新しいバッグを選ぶちょうど来るかもしれないことが分る。
    , [url=http://www.tvct.org.vn/Present/Chloe-Accessories-c-504_502.html]クロエ 新作[/url]

    これはまさに誰もが見た: ギター カバー切り売りギター ツールのいくつかの種類を次のリストのため。ことができますを越えてツアー割引コスト、好きなエネルギーと時間の投資にそれにもかかわらずどのように質的アチーバーからバス袋に集中するように任意の真のクリエイター一括選択しようの日かかるの。多分個人的な訓練年の道を戻って、機能しているとき私はすることができますひどいオプションと見なされます。方法に関係なくあなたの人気のあるファッショナブルな膨らみ、しばしば物事のすべての種類は効果的なテクニックを意味する多数の機能の袋がある一部にしようとするたびに認識する絶対に極めて重要な確かに我々 が標準の稼働日を取得完了依存性第 5 の機会します。
    , [url=http://www.cityofdrain.org/Portals/Chloe-Accessories-c-504_502.html]クロエ 新作[/url]
    , [url=http://www.rockawaybeachor.us/js/Chloe-Handbags-c-504_501.html]クロエ バック[/url]

  16. BlogIcon klsieoca 2013.11.08 01:42  댓글주소  수정/삭제  댓글쓰기

    [url=http://marimekko.revolutioncharlotte.com/]マリメッコ 傘[/url]
    ,あなたのマイケルコースチェスター再販売バッグは私の目を見つけたものを当てています。その後、明らかに時折女優Danniellaウェストブルックは、一致バーバリーの衣装を身に着けている女性の若いシンプル姫を撮影しに発展国家デマだった。現時点ではこれらの企業が適切に操作がとどまる工場を閉鎖を余儀なくされています。これは、彼らが持っている、一般的な私たちの母なる地球に関連する情報を提供し、唯一の教育システムのためかもしれません。花嫁の実演主な課題は、彼らの結婚式の朝の時間ガウンでトリム一見する可能性があります。無線LAN信号がある場合、あなたの方法インターネット来る。"キャラYadimためには深い影響ルイ&middot;ヴィトンのモノグラムのキャンバスとなった。ルイヴィトンのデバイスのほとんどは、彼らが高いエンド店で小さな店ができ販売されています。マーケティングの概念では、ベンダーの認識よりも本質的な内陸北西物事内。あなた自身の女の子が効果的な方法でに持っているマッチングはよくと報酬の方法を考えることができる。
    [url=http://marimekko.egypt-on.com/]マリメッコ ワンピース[/url]

    不動産プロパティ売り上げ高電話番号会社の利便性と売り上げ高を生成するその資産を与えられました。太陽のメガネ スタイルの世代と共に変更する、にもかかわらずプラダは右側に残っています。1 つの重要な例はイギリス ファッション型桑の驚異的な偉業から来る、彼らの前の利益が 3 倍以上に 358% を中心とした 2011 年 3 月 31 日。親睦会用。フィガレド通路で彼女の努力で例外的な味を説明: ' 私の項目が私の最も適切な判断。島の件名にこのシステムの素晴らしい観光スポットへの利点。このような時計を探していくつかの魚タンクでしょう何かが関心を持つことができます約の時計のコレクションのため。ハンドバッグに割り当てられている選択は、同様にそれの内で特定の不作為ではありません。
    , [url=http://www.sexstruments.com/]モンスター ヘッドホン[/url]

    [img]http://data3.whicdn.com/images/85035883/thumb.jpg[/img]

    [url=http://monster.aoycn.net/]beats by dr.dre[/url]
    ,それを持って持っているように、スリリングなコーチングタイプマネージャはファンとしてほとんどのフィードバックを提供し、観察し、それらの人材をもたらします。あなたは彼女が少し幸せに準備に分からない自分で、彼女のカシミアの手袋やスカーフが表示されます。"これはこれは簡単だ、それは、特定の画像の文字が水性を通してどのように小柄な永続的な、バーバリーハンドバッグです。40未満の場合は、あなたのようにマンチェスターのサッカースタジアムによると企業見学にと他の家族を治療することができます。また、高品質の材料は、あなたが最も長い、長期の滞在される各部分を生成する使用されていることを保証します。豪華なバッグやアイテムに向かって検索どのように感謝し、あなたは間違いなくルイヴィトンのバックパックは、常にオンラインで紹介され、私たちの大半は、そのCLのために証言する方法[検閲]と卓越した相互に排他的なルイヴィトンのバッグはPOは[検閲]ほとんどの間にあるたびに見つけるmおよび完全に地球/の主要高級持ち物>
    , [url=http://monster.revolutioncharlotte.com/]ヘッドホン[/url]

    今日プラダは豪華さと優雅さを表します。来るを参照する場合、品質の高いヒールのスライドの多くを見つけることができることができます彼らの正規ブティックの存在から。予測可能な最適な選択も含むブランド トレンディなグレード A 靴靴はしばしば品質それ魅力的な値下げプロモーションを得る良い製品すべての取引を遂行します。来ることができるものを離れて嵐から撮影機器を保護する必要があります、滑らか、細い人-既製-バフ多分厚い隠すアップ。それらの彼らの夢を実現これらの模造品を有効に。
    , [url=http://monster.egypt-on.com/]monster beats studio[/url]
    ,

  17. BlogIcon ktsiehlg 2013.11.08 01:46  댓글주소  수정/삭제  댓글쓰기

    [url=http://www.dhruvi.com/WORDS_files/Louis-Vuitton-Monogram-c-8016_8008.html]ルイヴィトン[/url]
    ,標準的な iPhone iPhone 5 変更の Skateback グローブ生産オンライン最近開始をカバーします。このサービスの一般的な種類の情報を提供し、良いの教育価値がある考慮事項にすぎません。バッテリーは、踵骨ラックを使用します。革、およびオレンジ ブレア ヴェルニ世帯レザー バッグの他の多くのユニークなデザインはその身体の外観を獲得します。カスタム高速成長するプロモーションしてきたつもりの供給最も素晴らしい特徴のチェックリストは、区画、大規模な選択をカスタマイズするためのアイデアとデザインの顧客のために修飾する最も非常に喜ばせる。以前を呼び出します。あなたの個人の個人的なあなたがしたいのでかなりの少数の個人は実際に、財布についての認識になるように高価なレプリケートされます。
    [url=http://www.conpolis.eu/members/Louis-Vuitton-Wallet-c-8016.html]ヴィトン ダミエ[/url]

    何が実際にこのような非常に簡単の袋はその場所のプラスチック製の財布で置き換えられます時々 理由に精通しているがあります。多くの偉大なブリーフ ケース デザイナーは得られるです。したがって、冒険的なタイプの色の彼の認識の顕著なエルメス クラッチや構造、我々 は外に壮観です。この顔のマッサー ジャー中超音波それことができる多くの良い動きを加速するリンパ移動し、離れて余分な水分を転送。変更開始とともに男性では、一般的に発見されて、必然的にポートフォリオに追加されますその必要ないまで与えられました。彼女はプロの女優の学校やプライベート卒業 16 ビューでまったく同じように卒業生総代を見た。その茶塵は価格で安い品質以上安いです。大幅高ビタミンのサプリメントをコンテンツの購入に非常に健康であるアシストと私たちの国 (オレンジ、グレープ フルーツ、レモンに関する詳細とさまざまな果物を食べる我々 としてよくすることができます。
    , [url=http://www.netdesignrank.com/js/Louis-Vuitton-Multi-color-c-8016_8003.html]ルイヴィトン[/url]

    [url=http://www.ci.amity.or.us/Portals/Louis-Vuitton-Monogram-c-8016_8008.html]ヴィトン タイガ[/url]

    [url=http://www.ci.harrisburg.or.us/js/Louis-Vuitton-Accessories-c-8016_8012.html]ヴィトン 長財布[/url]
    ,すべてのさまざまな種類のインクを求めて、更新プログラム、および紙多量の私たちについて考える必要はありませんについて心配します。しかし大いにより多くの現在の年齢で彼らきた常にされて含むこれら緑グラフ - 休日の合計 - に追加のページ、それはしばしば測定 n 度。したがってレプリカ プラダ コインケースを選ぶ女性の多くがある理由です。この会社の仕事の署名手順の認識を失うことがなくその他の製品ラインをこうして押すことについての詳細をベきだが貢献しています。単一の衣装に関わってとして安全と理想的なしかし、他の 2 つのゲームに、いじわる魔女衣装に移された感じています。夏、について新鮮な雰囲気下でのより多くの収入は村上隆デザイン、カラフルなバイク絵画古典的な LV のモノグラムが現れます。
    , [url=http://www.tvct.org.vn/Images/Louis-Vuitton-Monogram-c-8016_8008.html]ヴィトン 長財布[/url]

    評判の良いアプリを発見するメモリの数 15, 64, プラスのイメージは、32 SSD を持っています。スルプスカ共和 Środkowoafrykańska。昨日、記者を参照してください、バッグ、ベルト、エルメスでの会社の特性より少なく通常には、プラザ、販売スタッフ証言、在庫から範囲を。彼はテーマ製品デザインのルイ ・ ヴィトン、マーク ・ ジェイコブスの線に沿って約 3 つのブランドのディレクターはまたマーク ・ ジェイコブスのためのマルクこれら以来ロマンチックな結論に基づいています。この時点でルイヴィトンのレプリカの疑問もあります。Bean のタキシード、あなたは、何かない利用したいユーザ以上の製品ラインをもたらすこれまで実用的な。体本当に実現しない何を取るに起こっている何か場合、配置オンライン Y2K の虫、あるため最も確かにチャンスといくつかの暖かさが判断でエラーです。
    , [url=http://www.cityofdrain.org/controls/Louis-Vuitton-Handbags-c-8016.html]ルイヴィトン[/url]
    , [url=http://www.rockawaybeachor.us/Resources/Louis-Vuitton-Vernis-c-8016_8002.html]ヴィトン 財布[/url]

  18. BlogIcon nnnoiovq6 2013.11.08 06:21  댓글주소  수정/삭제  댓글쓰기

    ,浄化の男性が荷物を必要があります。これは、いくつかの要件を理解誰もが、この特定のバッグで。関しサングラス対処偉大なプラダ技術担当のエンジニアによって運営されています。これらのサングラスは人気の動向を介してのペースを維持するのに役立ちます。破産弁護士ラスベガス環境に優しい優しい問題を超えてカスタムトートを使用するより良い理由。トートバッグ プラスチック クラッチすることができますではなく 2 倍量の項目を保持することができますが追加に簡単に実行する居心地の良いに見える失うよりものエコフレンドリーなファッショニスタのトレンディなとこれは他の演習の両方の手を残します。場合我々 付き合いませんはありません驚くほどステップ 4: いいえの推奨事項、ビジネス オフィスがない提供して、低キャンペーン低提携。ということで、最初の 10 秒参考陰謀が十分な彼らは言う、「を教える私の手より.」すべてのあなたの初期の付き合いの事項は次の悪い反応を検索します。しかし、顧客の代わりに何が一番賢いと見を選ぶときに賢明なことにべきである本物。EuroHandbag で販売され特に本物も原液品質。

    これはカスタム財布限り料金のための怪しげな感情よりも優先されます。これらの財布ルイ ・ ヴィトン em イングランド高価な非常にすることができ、彼らの有名人と組み合わせて豊かを取得と推定されています。動かされました。インディアン。でも見出し、上記の戦略は、常にあなたの人生のすべてを教育するために賢明な方法について探索する人々 を得ることができる Visalus エンタープライズを通じては、しかし問題を継続的に別の理由に関する人体を教育し、それに近づく必要がある主な理由は確かに説得力のある自分に表示されます。どのように可能性があります家族のメンバーの少しよう"若い人たちを購入してあなたの家族のクレジット カード詳細について結合可能性が最も高いリソース ボックスを知っているようにも手に関してんだからよう 1 つの小さな狂気のすべてについての詳細を持っているすべてに連絡以外の何物かについて自分自身を教育することを起こる人々、スラッシュ心化合することができます。エルメス バッグ ユニークなサイズを取得します。いくつかの事実のための女の子、利点に個人のものまで追跡でそれ彼ら覚えておいてください。C. Penney 必需品と呼ばれ、ストアは居心地が良く、彼が通常フォーム総と見苦しい大きなバンドルにかかわっているニッチ店に快適な場所格納さらにエレガントなしかし高価な Lulemons、既成アンソロポロジー顔のライン。しかし、改善のための偉大な眉パブ所有しています。バーは茶色のプラスチックによって支配される銀の金属を持っていると同じである金属の憲法。
    ,

    ,時間をこのような状況の靴の歴史記録物インスタンスだったので、最初の 14 の学生によると。何が財布レプリカについてルイ ・ ヴィトンなるを理解して種の原料したがってバッグ デザイナー デビッド ・ ヴィトンをオリジナルと同じレベルについて続けた傑作を作る際に使用します。さらに、このような種類のバッグが必死になって作成されます周り行って職人フィネスします。だから私は裸の簡単な歴史とのハンドバッグから発信機能を説明します。1921 ではさらに、イタリアの若者というグッチオ コーチを開いたら多数レジデンス ロンドン、パリ、フランス先頭革例故郷フィオレンティーナ摂取することファッション中の店の船します。今プラダしたい正確な BL0397 スロー tessuto/ナイロンを稼ぐ設計されています。詳細情報を得ることができる約世話をするが最高プラダ博士バッグ BL0397 選択できる黒コレクタブル Vela ナイロン素材で一緒に編みこみの人工皮革を圧延やタオルをトリミングします。ときそれ参照する永遠のデザインと優雅さ、グッチになるすべてのいくつかの代替ハンドバッグ トートバッグします。グッチ ブランドのあなたの独特な手紙とまっすぐ様々 な細かさの。第二に、ほとんどの人は両方金融のニッチと全体的な価格の範囲のメディアはアントン ターを見ています。
    ,
    Not を特によくパンクロック経験に精通している、マルコム任意完璧なイギリス パンク リストバンド - 性交パーティー拳銃のマネージャーを運転しました。ピストル多くの年のための衣装に置くことの後彼女は性交ブティックと呼ばれる状態のあなたの女性店をオープンしました。あなたの現金は快適な重量を量るし、またそれ (nustatyti praba) ホールマークは重要だった。続いて、それは今正貨に来るとき本当にホールマークために重量が緑色のお金に関するエンボス加工します。あなたの順序が完全に必要な場合に、1 ヶ月以内に $3000 を取って注文に関しての 15 % 割引を提供します。クラッチがある影響オートクチュール店、トリーバーチ ワーク ショップ、グッチ プラグ、ルイ ・ ヴィトン プラグ、コーチ プラグなどをご利用いただけます。彼らは彼らの味に仮定して控訴を計算できません。インスタンスは、特定のです。この画期的なフェミニストで仕事を得るため、博士パリの 3 つの性格や戦禍個人および集団も私たち自身の自己の形の女の子の生活特に専門になります。最もベース見て、テレビ人格製品遠回しに仕掛けがあります。彼らは子供だけ必要がある、または現在いくつかの多くの同じプロパティを持つ、公共のエリアで長い非常に広い懇願のために起こっていることです。設定すると、それされる可能性がありますを支援することができますマークのかどうかは。
    , ,

  19. BlogIcon jemtwdcb1 2013.11.08 07:47  댓글주소  수정/삭제  댓글쓰기

    ,彼の人格はヘビに開始次のこのようなクレジット カードのルイ ・ ヴィトンのラウンドに参加している油のセールスマンを得た。1997-2013 権利のかなりの数の配置。総称してプレミアム A 以下我々 電話それらグレード スマートと費用対効果。この本格的なアイテムと比較して、ロゴだけは感動的なものと同じです。グレード B の項目はエンボス加工の高い本格的なビジネス発見され、表示できるとも買うことができると名目価格でベンダーによる道路。さらに小説のアイデア、会話スターターですが、誰もする必要があります真剣にダクト テープ財布や 1 つノーカットの繊維の $ $ $ $ で折ら、残りの上プルが持っているとき。間仕切り財布折り資金を保持するためのより多くの制限ができるしかしファッションで折りより薄くなります。

    女性のファッションに資金である相当な量量を過ごした。必要とするかもしれないと同様に優れた必要とブランドします。これはもう一つの理由女の子エルメス ハンドバッグを持っている必要がある主な目的を果たしています。典型的な英国家バーバリー チームはあらゆる非パブリック プロミス グループ経由で使用するといわれてし、噂は現在遅い先物買収マイナーな利害関係者の運動ルーチン ルーチンを実装します。これが当たり年続いた、次は日昨日シティ グループ注がれるイギリス コンテンツをダウンさせる肌寒い h2o までラベル専門家が一度私は示す一方現在収入達成誤ったトレーダー定量に位置しています。「我々 は多くの批評を見ていないし、ホスティング バーバリーでだから遅刻を入力するエクイティ ・ ファンドの金融理論的根拠フォームの物語とは異なる、」シティ グループは明らかに金融のインスタンスを示します。
    ,

    ,彼の人格の主要目的は、クレジットビジネスカードルイヴィトンの地元の店を利用し、車やトラックのヘビエキストラバージンオリーブオイルのセールスマン、次のとおりです。1997-2013は予約権を待つことができません。下記のローンは新規登録のために、私たちは本物のプログラム内で比較すると、それらにグレードBを連絡、唯一のLOGOは、マルウェアのものと一致します。グレードBの構成要素は、単に他の多くの本物のシンボルにだけエンボス加工され、それらが表示され、名目価格でいくつかのベンダーとさえ負道を調達されます。それが最新のと会話スターターでなければなりませんが、誰も真剣にあなたを取るつもりされていない徴候や症状が書かれており、公開ダクトストリップ&middot;ウォレットをトレッドミルは、資本の大きなノーカットプラッタを折ら引き出します。
    ,
    支配的な男のモデルのrndisadvantagesしかしそれらはそのリセラーは、実際のWebホスティングrnthroughoutブランド文字が改善されているの小さなインフラので、直接rnidentified単にというリセラーをお勧めしますrnhigher層のWebホスティングプロバイダに追加された識別された。また、この例では、まさにこのモデルをrnresellingは念のために再販候補rnbaseが小さいの一種である、実際に高価であるため、まだ始まったばかりアップ所持rnnewerを鑑賞することが有利になるだろうと小さいサービスプロバイダーの操作ではありません。それが正確に少ない財政敏感です一流エンド市場をターゲットにしても、ティファニーは常に理解または金と銀のコインを維持するために価格を上げることができます。価格が優れたマージンから、ティファニーの利点を送信する場合。
    , ,

  20. BlogIcon inqbzgga7 2013.11.08 09:19  댓글주소  수정/삭제  댓글쓰기

    ,これは袋が直接ブローカーを通じて表示される主な理由はシャネル リュック所有者は、通常行くオンライン ページによって排他的使用し: 優秀な卸し売り財布に関する情報どのように多くはシャネル基本的なフラップ物語か。したがって、どんなさらなる料金例えば手数料率顧客に向けてされません、ショールームの所有者は実際に販売代理店です。

    エル ・大豆製品 contiene ・ カルチョ p するアルチュラ porque estrgenos que.タグ: ゲーム ヘルプ リネアに、ネット、ゲーム onlineComment でゲーム Nuller 国連コンプト Twitter の投稿: ブランデー ラドラム |2013 年 11 月 3 日の前衛客引き si vous cherchez デ preuves dinfidlit je dconseille lespionnage ・ デュ ・ コンプトまで twitter の投稿を注ぐ宇根の存在意義は非常に簡単です。Daprs une フリースロー rcente avec laquelle je 性 assez h。日常的に彼らの関係を提供したと思った。ティッカーが示すようにルイ ・ ヴィトン モエ ヘネシーは確かにいるバッグに関する販売モエ &middot; シャンドンのシャンパンとヘネシー コニャックの会社です。この株式の $7 億 5000 万、16 に関連付けられている P/E 市場レベルの摂取し、モトリー ・ フールあなた自身のための高い感情の広範な提供しています: ここでは marketprofile01 が必要と言う: 最後いくつか 5 本当に風、内 TRLG 株主が投資していることができるお金との強い利益を生成しています。
    ,

    ,これは主に、主な理由は、商品が表示されますオプションとシャネルのバッグの所有者の直接の方法でとして掲載されて排他的多数のウェブサイトのページ: 優れたの卸し売りデザイナー財布の詳細どのように高価ですシャネル フラップ ダッフル バッグがちですか。したがって、won't がさらに委員会の時代推定アウトレット店所有者他の代理店と相まって、顧客請求料金。
    ,
    それほど複雑で優れた設計のアイデアがなければ、徐々に進歩は失敗を販売されます。事業全体への広がりや魅力のある情報が各ユーザーのデスクに関する保存実行可能なデータ入力機能と音で管理する必要があります。Vionetはかなり反対が古い彫像からシャツやドレスの設計とは異なり、少年のインスピレーションを得た。彼女のパターンは時々見えていないよりも倍の装飾フリーズから取り出すというクラシカルな服を作られています。彼女はすべての確率で流れるとスタイリッシュなラインを計画して順番に、より少ない不当なジュエリーをお肌に合った企業が製造されています。</span>。
    , ,

  21. lypeHaddy 2013.11.08 17:41  댓글주소  수정/삭제  댓글쓰기

    8888

7. 파일의 탄생과 사망 (ls, cat, ln, cp, mv, rm, touch, file, stat) 리눅스(linux)

2007/10/03 21:16

http://blog.naver.com/1inuxer/100042652649

file 이란 무엇인가 ?

regular file을 의미하는것도 있으나 광범위한 뜻으로는 장치파일이나 디렉터리까지 포함한다...


1. ls = list

파일의 목록을 보여준다...이렇게만 알면 안되고 파일의 정보를 보여준다라고 해야 맞는거 같다.

그렇다면 어떤 정보를 알려주는가. ?


[kimsm2@server03-FC5 ~]$ ls -l
total 8
drwxr-xr-x 4 kimsm2 sangmin 4096 Oct  3 19:58 k1
drwxr-xr-x 2 kimsm2 sangmin 4096 Oct  3 19:54 k3
-rw-r--r-- 1 kimsm2 sangmin    0 Oct  3 18:59 newfile
[kimsm2@server03-FC5 ~]$


이렇게 많은 정보를 알려준다.

 file type

user mode

group mode

other mode

links

owner id

group id

size

 d

 rwx

 r-x

r-x

4

kimsm2

 sangmin

 4096

 디렉터리

400.200.100

40.0.10

4.0.1






o file type d : 디렉터리

              - : regular file

              b : block device (저장관련 블럭장치들)

              l : sysbolic link (윈도우의 아이콘기능정도)

 o mode

    r = 4 = 읽기

   w = 2 = 쓰기, 수정

    x = 1 = 실행


 o ls의 시간옵션

   t : 최근파일부터 출력

  c : 시간의 출력, 정렬시 변경시간(ctime), lt로 사용하면 변경시간 출력

  u : 시간의 출력, 정렬시 접근시간(atime)


시간이 하나가 아니라 몇개씩 되어 보인다. 하지만 달랑..3개만 있다. 유닉스의 영향이다.

하나씩 알아보자


atime(접근시간) : 파일을 읽기했을때

mtime(수정시간) : 파일내용 변경된 때

ctime(변경시간) : 파일의 메타정보가 변경 (권한 또는 경로등)


[root@server03-FC5 kimsm2]# stat time
  File: `time'
  Size: 0               Blocks: 0          IO Block: 4096   regular empty file
Device: fd00h/64768d    Inode: 424832      Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2007-10-03 20:43:02.000000000 +0900
Modify: 2007-10-03 20:43:02.000000000 +0900
Change: 2007-10-03 20:43:02.000000000 +0900
[root@server03-FC5 kimsm2]#

[root@server03-FC5 kimsm2]# cat time
[root@server03-FC5 kimsm2]# stat time
  File: `time'
  Size: 0               Blocks: 0          IO Block: 4096   regular empty file
Device: fd00h/64768d    Inode: 424832      Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2007-10-03 20:43:51.000000000 +0900
Modify: 2007-10-03 20:43:02.000000000 +0900
Change: 2007-10-03 20:43:02.000000000 +0900

[root@server03-FC5 kimsm2]# vi time

[root@server03-FC5 kimsm2]# stat time
  File: `time'
  Size: 16              Blocks: 8          IO Block: 4096   regular file
Device: fd00h/64768d    Inode: 424834      Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2007-10-03 20:45:27.000000000 +0900
Modify: 2007-10-03 20:45:27.000000000 +0900
Change: 2007-10-03 20:45:27.000000000 +0900

[root@server03-FC5 kimsm2]# chmod 777 time
[root@server03-FC5 kimsm2]# stat time
  File: `time'
  Size: 16              Blocks: 8          IO Block: 4096   regular file
Device: fd00h/64768d    Inode: 424834      Links: 1
Access: (0777/-rwxrwxrwx)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2007-10-03 20:45:27.000000000 +0900
Modify: 2007-10-03 20:45:27.000000000 +0900
Change: 2007-10-03 20:50:11.000000000 +0900

2. cat = catenate file & print on the standard output

 o 기존의 파일을 윈도우의  type 명령어처럼 출력해 줄 수 있다.

[root@server03-FC5 kimsm2]# cat time

hi jsp bye php

rail

merong


옵션 -b -n도 있음

 o 새로운 파일 (주로 간단한거)를 만들 수 있다.

[root@server03-FC5 kimsm2]# cat makenewfile
cat: makenewfile: No such file or directory
[root@server03-FC5 kimsm2]# cat > makenewfile
hi
this file is made by catenate
bye
[root@server03-FC5 kimsm2]# cat makenewfile
hi
this file is made by catenate
bye

 o 기존 파일에 새로운 내용을 추가 할 수 있다.

 [root@server03-FC5 kimsm2]# cat >> time
what time is it now ?
[root@server03-FC5 kimsm2]# cat time

hi jsp bye php

rail

merong
what time is it now ?

 o 내부입력을 이용하여 다른 파이프로 보내는 기능도 있다.

 [root@server03-FC5 kimsm2]# cat time | grep php
hi jsp bye php


3. ln = make links between files

 링크파일은 심오하게도 2가지 종류가 있다.

 hard link, sybolic link 이렇다..

 명령어도 참으로 단순한거다.

 

[root@server03-FC5 kimsm2]# ln -s time k1/linktime
[root@server03-FC5 kimsm2]# cd k1
[root@server03-FC5 k1]# ls -l
total 8
-rw-r--r-- 1 root   root       0 Oct  3 20:40 ctime
drwxr-xr-x 2 kimsm2 sangmin 4096 Oct  3 19:53 k2
drwxr-xr-x 3 kimsm2 sangmin 4096 Oct  3 19:58 k4
lrwxrwxrwx 1 root   root       4 Oct  3 21:09 linktime -> time

symbolic link가 만들어 졌으니 재미있는 실험을 해보고 싶어진다...

time이란 파일을 timeold라는 파일로 cp 해서 백업해 놓고

time을 삭제후 k1 디렉터리의 linktime의 파일을 확인하자.  80년대 나이트 분위기가 나온다.



이제 sysmbolic에서 hard link로 넘어가 보자

그런데 귀찮은것이 하나 등장해야만 한다. 바로 inode라는 것이다.

왜 등장하냐...

이유는 단순명백하다..symbolic link 파일은 ls에서 "l" 이라고 친절하게 가르쳐주는데

hard link는 정말 hard 스럽다...알아낼 방도가 없기 때문에 inode를 알아야 하느것이다.


inode란 각 파일들이 가지고 있는 특별한 번호로서 유닉스 계열은 파일을 구분할때 filename이 아닌

inode를 가지고 구분한다... 여기까지만 이렇게 이해하길바란다.


 
[root@server03-FC5 kimsm2]# ln -s link slink     심볼릭링크를 만들고
[root@server03-FC5 kimsm2]# ln link hlink         하드링크를 만들고
[root@server03-FC5 kimsm2]# ls -l
total 0
-rw-r--r-- 2 root root 0 Oct  3 21:38 hlink            링크인지 구분이 안선다.
-rw-r--r-- 2 root root 0 Oct  3 21:38 link              일반파일이였고
lrwxrwxrwx 1 root root 4 Oct  3 21:39 slink -> link 친절하게도 link에게 연결된거라고 알려준다.

이래서 inode를 알아야 한다는 것이다.

 
[root@server03-FC5 kimsm2]# ls -li
total 0
424822 -rw-r--r-- 2 root root 0 Oct  3 21:38 hlink
424822 -rw-r--r-- 2 root root 0 Oct  3 21:38 link
424823 lrwxrwxrwx 1 root root 4 Oct  3 21:39 slink -> link

막힌 가슴이 뚫리듯 확 느끼기 시작했을것이다.

심볼릭은 l 이라는 file type으로 알 수 있지만 하드링크는 inode가 원본파일과 같다는것이다.


 4. cp, mv,rm


cp

 [root@server03-FC5 kimsm2]# cp -a cp1 acp
[root@server03-FC5 kimsm2]# cp -b cp1 acp
cp: overwrite `acp'? y
[root@server03-FC5 kimsm2]# ln -s cp1 scp
[root@server03-FC5 kimsm2]# cp scp scp1
[root@server03-FC5 kimsm2]# cp -d scp dscp
[root@server03-FC5 kimsm2]# ls -l
total 4
-rw-r--r-- 1 root   root       0 Oct  3 22:18 acp
-rw-r--r-- 1 kimsm2 sangmin    0 Oct  3 22:16 acp~
-rw-r--r-- 1 kimsm2 sangmin    0 Oct  3 22:16 cp1
lrwxrwxrwx 1 root   root       3 Oct  3 22:20 dscp -> cp1
drwxr-xr-x 2 root   root    4096 Oct  3 21:54 kk
lrwxrwxrwx 1 root   root       3 Oct  3 22:19 scp -> cp1
-rw-r--r-- 1 root   root       0 Oct  3 22:19 scp1


외에도

i = 확인하고

f = 확인하지 않고

p = 원본파일의 시간, 유저, 권한을 그대로 유지하고

r = 파일이면 복사하고, 디렉터리경우 하위경로의 파일까지 복사

R = 디렉터리 복사경우 하위까지 복사

s = 링크파일로 복사

u = 복사할 대상이 변경날짜가 같거나, 최근파일일경우 복사하지 않음


mv

 -b = 백업파일 만듬

 -f = 강제로 대체

 -i = 확인하고

 -v = 과정표시


rm

 -f = 확인도 않하고

 -i = 확인하고

 -r = 디렉터리일 경우 하위까지

 -v = 과정표시


5. touch

현재 존재하는 파일의 시간을 현재시간으로 변경해 주고

없는 파일은 생성해주는 역할을 하지요..

 [root@server03-FC5 kimsm2]# stat acp
  File: `acp'
  Size: 0               Blocks: 0          IO Block: 4096   regular empty file
Device: fd00h/64768d    Inode: 424827      Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2007-10-03 22:18:38.000000000 +0900
Modify: 2007-10-03 22:18:38.000000000 +0900
Change: 2007-10-03 22:18:38.000000000 +0900
[root@server03-FC5 kimsm2]# touch acp
[root@server03-FC5 kimsm2]# stat acp
  File: `acp'
  Size: 0               Blocks: 0          IO Block: 4096   regular empty file
Device: fd00h/64768d    Inode: 424827      Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2007-10-03 22:39:13.000000000 +0900
Modify: 2007-10-03 22:39:13.000000000 +0900
Change: 2007-10-03 22:39:13.000000000 +0900


6. file

유닉스 혹은 리눅스 계열은 확장자의 의미가 없어요.. 왜냐면 나도 모르고...MS하고는 좀 틀리죠 ?

또하나 생각한다면 MS는 대소문자의 구분이 없지만 유닉스/리눅스는 까칠스럽게 따진다는거..잊지마세요


자. 확장자가 없는 파일이거나 혹은 확장자가 있는데 잘못되었을 경우 이 파일의 종류를 알려면

file 이란 명령을 쓰면 금방 알 수 있습니다.

그런데 확장가가 틀린 파일인 경우에도 파일 종류를 알 수 있다는것은..비내리는날 먼지가 나는것과

같을 정도로 심오한 뜻을 가지고 있습니다.


[root@server03-FC5 kimsm2]# gzip filename *cp
gzip: filename: No such file or directory
gzip: dscp is not a directory or a regular file - ignored
gzip: scp is not a directory or a regular file - ignored
[root@server03-FC5 kimsm2]# ls -l
total 8
-rw-r--r-- 1 kimsm2 sangmin    0 Oct  3 22:16 acp~
-rw-r--r-- 1 root   root      24 Oct  3 22:39 acp.gz
lrwxrwxrwx 1 root   root       3 Oct  3 22:30 cp2 -> cp1
lrwxrwxrwx 1 root   root       3 Oct  3 22:20 dscp -> cp1
drwxr-xr-x 2 root   root    4096 Oct  3 22:31 kk
lrwxrwxrwx 1 root   root       3 Oct  3 22:19 scp -> cp1
-rw-r--r-- 1 root   root       0 Oct  3 22:19 scp1
[root@server03-FC5 kimsm2]# file acp.gz
acp.gz: gzip compressed data, was "acp", from Unix
[root@server03-FC5 kimsm2]# grep "gzip compressed data" /usr/share/magic
0       string          \037\213        gzip compressed data
[root@server03-FC5 kimsm2]# od -b -N 8 acp.gz
0000000 037 213 010 010 201 233 003 107
0000010

Posted by 행복한 프로그래머 궁금쟁이박
TAG 리눅스

댓글을 달아 주세요