실습 코드에

close(1); <<요런 라인이 있었다..

 

1이 뭐여?

 

알고보니 unistd.h 에서 사용하는 파일디스크립터(file descriptor)의 매크로이당.. ( POSIX API의 일부란다)

 

매크로란 인수형 등의 인자를 쉽게 기억하기(?) 위해

또는 코드 가독성을 올리기위해 사용하는 것...

아래 표의 첫번째칸 값을 넣으나

세번째칸 값을 넣으나 똑같다는 것이다

보통 C에서 대문자로 표현된당..

 

 

고로 close(1) 은

스탠다드 아웃풋 디스크립터를 닫는다 즉, 더이상 본 프로세스에서 표준 출력을 쓰지 않겠다 라는 것이다.

close(0) 은 표준입력을 받지 않겠다는 것이다.

위 세개의 파일 디스크립터, 스트림은 open을 따로 하지 않아도 프로세스 생성 시 자동으로 생성된다.

 

https://holsui.tistory.com/71?category=848174 블로그 내용


close(2) 함수 기능_파일 디스크립터 닫기

 

open으로 열었던 파일을 닫아주는 함수입니다.

하나의 프로세스에서 너무 많은 파일을 열게되면 시스템 자원을 낭비하게 되기 때문에 사용하지 않는 파일은 닫아주는 것이 좋습니다.

단 프로세스가 종료되면 파일은 자동으로 닫히기 때문에 프로세스 전반적으로 이용하는 파일의 경우에는 수동으로 닫아주지 않아도 됩니다.

 close ()는 파일 설명자를 닫아 더 이상 파일을 참조하지 않고 재사용할 수 있습니다. 
       연결되고 프로세스가 소유한 파일에 보유된 모든 레코드 잠금(fcntl(2))은 제거됩니다.
       fd가 기본 열린 파일 설명을 참조하는 마지막 파일 설명자(open(2))인 경우 열린 파일 설명과 연결된 
       리소스가 해제됩니다. 
       파일 설명자가 unlink(2) 를 사용하여 제거된 파일에 대한 마지막 참조인 경우 파일이 삭제됩니다.

함수 원형

#include <unistd.h>

int close(int fd);

매개변수

  • fd
    닫고자 하는 파일의 파일 디스크립터

반환값

성공 시 0을 반환
오류 발생 시 -1이 반환되고 오류를 나타내도록 errno 가 설정

출처:

https://bubble-dev.tistory.com/entry/CC-close-%ED%95%A8%EC%88%98

 

C/C++ close() 함수

close(2) 함수 기능 open으로 열었던 파일을 닫아주는 함수입니다. 하나의 프로세스에서 너무 많은 파일을 열게되면 시스템 자원을 낭비하게 되기 때문에 사용하지 않는 파일은 닫아주는 것이 좋습

bubble-dev.tistory.com

https://man7.org/linux/man-pages/man2/close.2.html

 

close(2) - Linux manual page

close(2) — Linux manual page CLOSE(2) Linux Programmer's Manual CLOSE(2) NAME         top close - close a file descriptor SYNOPSIS         top #include int close(int fd); DESCRIPTION         top close() closes a file descriptor, so that it no

man7.org

 

vi 파일 저장 및 종료하기

모드 명령키 설명
마지막 행 모드 :q vi에서 작업한것이 없을때 vi 종료합니다.
:q! 작업한 내용을 저장하지 않고 종료합니다.
:w[파일명] 작업한 내용을 저장만 한다. 파일명을 지정하면 새 파일로 저장합니다.
:wq. :wq! 작업한 내용을 저장하고 vi를 종료합니다.
명령 모드 ZZ (대문자) 작업한 내용을 저장하고 vi를 종료합니다.

내용을 편집한 후 vi를 종료하려면 명령모드나 마지막 행 모드에서 명령을 입력해야 합니다. 마지막 행 모드로 가려면 : 을 누르면 됩니다. 명령모드에서 파일의 저장과 종료를 동시에 수행하려면 대문자ZZ를 누르시면 파일을 저장한 후 vi를 바로 종료합니다.

 

vi 입력모드로 전환하기

명령키 설명
i 현재 커서 앞에 입력합니다.
a 현재 커서 뒤에 입력합니다.
o 커서가 위치한 행의 다음 행에 입력합니다.
I(대문자 i) 커서가 위치한 행의 첫 컬럼으로 이동하여 입력합니다.
A 커서가 위치한 행의 마지막 컬럼으로 이동하여 입력합니다.
O 커서가 위치한 행의 이전 행에 입력합니다.

vi 편집기에서 내용을 입력하려면 입력모드로 전환해야 합니다.

 

ESC 누를 시 다시 명령모드로 전환.

 

vi 커서 이동하기

명령키 설명
k 커서를 위로 이동합니다.
j 커서를 아래로 이동합니다.
h 커서를 왼쪽으로 이동합니다.
l 커서를 오른쪽으로 이동합니다.
^ / O 커서를 현재 행의 처음으로 이동합니다.
$ 커서를 현재 행의 마지막으로 이동합니다.
- 커서를 한줄 위 처음으로 이동합니다.
+ / Enter 커서를 다음 행의 처음으로 이동합니다.
H 커서를 화면의 맨 윗행으로 이동합니다.
M 커서를 화면의 중간 행으로 이동합니다.
L 커서를 화면의 맨 아랫행으로 이동합니다.
w 커서를 다음 단어의 첫 글자로 이동합니다.
b 커서를 앞 단어의 첫 글자로 이동합니다.
e 커서를 다음 단어의 마지막 글자로 이동합니다.
G 파일의 마지막 행으로 커서를 이동합니다.
행번호G 지정한 행 번호로 커서를 이동합니다.
:행번호 지정한 행 번호로 커서를 이동합니다. (마지막 행 모드)
:$ 파일의 마지막 행으로 커서를 이동합니다. (마지막 행 모드)

vi에서는 마우스로 커서를 이동할 수 없고 오로지 키보드로만 커서를 이동할 수 있습니다.

 

vi 화면 이동하기

명령 키 설명
Ctrl + u 화면의 절반 만큼 위로 이동합니다.
Ctrl +ㅇ 화면의 절반 만큼 아래로 이동합니다.
Ctrl + b / Page Up 한화면 위로 이동합니다.
Ctrl + f / Page Down 한화면 아래로 이동합니다.
Ctrl + y  화면을 한 행 위로 이동합니다.
Ctrl + e 화면을 한 행 아래로 이동합니다.

파일의 크기가 터미널 화면의 크기보다 클 경우에는 화면을 이동하여야합니다.

 

vi 내용 수정하기

명령 키 설명
r 커서가 위치한 글자를 다른 글자로 수정합니다.
cw, [수정할 단어 수]cw 커서위치에서부터 현재 단어의 끝까지 수정합니다. 숫자cw는 커서 위치로부터 지정한 숫자의 단어 만큼 수정합니다.
s, [수정할 글자 수]s 커서 위치로부터 ESC키를 입력할때까지 수정합니다. 숫자s는 커서 위치로부터 지정한 숫자만의 글자를 수정합니다.
cc 커서가 위치한 행의 내용을 모두 수정합니다.
C 커서 위치로부터 행의 끝까지 수정합니다.

vi에서는 내용을 수정할 수 있는 다양한 명령어를 제공합니다.

 

vi 내용 삭제하기

명령 키 설명
x, [삭제할 글자 수]x 커서가 위치한 글자를 삭제합니다. x앞에 삭제할 글자수를 지정할수도 있습니다.
dw, [삭제할 단어 수]dw 커서가 위치한 단어를 삭제합니다. dw앞에 삭제할 단어수를 지정할수도 있습니다.
dd, [삭제할 행 수]dd 커서가 위치한 행을 삭제합니다. dd앞에 삭제할 행의수를 지정할수도 있습니다.
D 커서 위치로부터 행의 끝까지 삭제합니다.

vi에서는 내용을 삭제할 수 있는 다양한 명령어를 제공합니다.

 

vi 명령 취소하기

명령 키 설명
u 명령을 취소합니다.
U 해당 행에서 한 모든 명령을 취소합니다.
:e! 마지막으로 저장한 내용 이후의 것을 모두 취소합니다.

vi에서 명령을 잘못 입력한 경우 그 명령을 취소할수도 있습니다. 윈도우에서의 Ctrl +Z와 비슷한 기능이라고 생각하시면 됩니다.

 

vi 범위 지정하기

명령 키 설명
1, $, % 1행부터 마지막 행까지 범위를 지정합니다.
1,. 1행부터 커서가 있는 행까지 지정합니다.
.,$ 커서가 있는 행부터 마지막 행까지 지정합니다.
.,.+2 현재 행과 두번째 아랫행까지 지정합니다.
10,20 10행부터 20행까지 지정합니다.

윈도우에서는 마우스를 드래그하면 범위를 지정할 수 있지만 vi에서는 위의 명령키를 입력하여 범위를 지정하여야 합니다.

 

vi 내용 복사하기 / 잘라내기 / 붙이기

명령 키 설명
yy, [복사할 행 수]yy 커서가 위치한 행을 복사합니다. yy앞에 복사할 행의 수를 지정할 수도 있습니다.
dd, [잘라내기할 행 수]dd 커서가 위치한 행을 잘라내기합니다. 삭제와 같은 명령어입니다. dd앞에 잘라내기할 행 숫자를 입력할 수도 있습니다.
p 커서가 위치한 행의 아래쪽에 붙여넣기를 합니다.
P 커서가 위치한 행의 위쪽에 붙여넣기를 합니다.

vi에서도 일반적인 편집기처럼 내용을 복사하거나 잘라붙이기도 가능합니다.

 

vi 내용 검색하기

명령 키 설명
/문자열 문자열을 커서 아래 방향으로 검색합니다.
?문자열 문자열을 커서 위 방향으로 검색합니다.
n 원래 방향으로 다음 문자열을 검색합니다.
N 반대 방향으로 다음 문자열을 검색합니다.

윈도우에서 Ctrl+F를 하여 문자열을 검색하듯 vi에서도 문자열을 검색할 수 있습니다.

 

vi 내용 치환하기

명령 키 설명
:s/[대상문자열]/[바꿀문자열] 커서가 위치한 행에서 첫번째로 나오는 대상문자열을 바꿀문자열로 바꿉니다.
:%s[대상문자열]/[바꿀문자열] 파일 전체에서 모든 대상문자열을 바꿀문자열로 바꿉니다.
:[범위]s[대상문자열]/[바꿀문자열] 범위 내 모든 각 행에서 첫번쨰로 나오는 대상문자열을 바꿀문자열로 바꿉니다.
:[범위]s[대상문자열]/[바꿀문자열]g 범위 내 모든 행에서 대상문자열을 바꿀문자열로 바꿉니다.
:[범위]s[대상문자열]/[바꿀문자열]gc 범위 내 모든 행에서 대상문자열을 바꿀문자열로 바꾸되 수정할 지 여부를 묻습니다.

문자열을 바꿀 수도 있습니다. 다만 문자열을 바꿀때에는 마지막 행모드로 전환을 해야만 사용이 가능합니다. 명령어 앞의  : 는 마지막 행모드로 전환하는 명령키입니다.

 


출처:

coding-factory.tistory.com/505

'Linux' 카테고리의 다른 글

[Linux] what is diffrent zombie and orphan process?  (0) 2023.04.06
[리눅스] process 관련 system call 설명  (0) 2023.04.04

딕셔너리란?


사람은 누구든지 "이름" = "홍길동", "생일" = "몇 월 며칠" 등으로 나타낼 수 있다. 

이러한 대응 관계를 나타내는 자료형을 갖고 있는데, 이를 연관 배열(Associative array) 또는 해시(Hash)라고 한다.

파이썬에서는 이러한 자료형을 딕셔너리(Dictionary)라고 하는데, 즉 "people"이라는 단어에 "사람", "baseball"이라는 단어에 "야구"라는 뜻이 부합되듯이 딕셔너리는 Key와 Value를 한 쌍으로 갖는 자료형이다.

 

딕셔너리는 Key를 통해 Value를 얻는다. (리스트나 튜플은 순차적으로(sequential) 해당 요솟값을 구함)

baseball이라는 단어의 뜻을 찾기 위해 사전의 내용을 순차적으로 모두 검색하는 것이 아니라 baseball이라는 단어가 있는 곳만 펼쳐 보는 것이다.


딕셔너리의 키, 값 쌍 얻기 - items()

딕셔너리(dictionary)는 items()함수를 사용하면 딕셔너리에 있는 키와 값들의 쌍을 얻을 수 있습니다. 

>>> car = {"name" : "BMW", "price" : "7000"} 
>>> car.items() 
dict_items([('name', 'BMW'), ('price', '7000')]) 


items함수를 사용하면 딕셔너리의 값을 반복할때 키와 값을 접근하기가 매우 유용해집니다.

>>> car = {"name" : "BMW", "price" : "7000"} 
>>> for key, val in car.items():
...		print("key : {} value : {}".format(key,val)) 

key : name value : BMW 
key : price value : 7000 

Key, Value 쌍 얻기(items)

>>> a.items()
dict_items([('name', 'pey'), ('phone', '010-9999-1234'), ('birth', '1118')])

items 함수는 Key와 Value의 쌍을 튜플로 묶은 값을 dict_items 객체로 돌려준다.


출처

https://wikidocs.net/16

https://devpouch.tistory.com/75

 

[Python] 파이썬 딕셔너리 키, 값 쌍 얻기 - items()

딕셔너리의 키, 값 쌍 얻기 - items() 딕셔너리(dictionary)는 items()함수를 사용하면 딕셔너리에 있는 키와 값들의 쌍을 얻을 수 있습니다. >>> car = {"name" : "BMW", "price" : "7000"} >>> car.items() dict_items([('name'

devpouch.tistory.com

 

'Python' 카테고리의 다른 글

[python] self와 __init__의 이해  (0) 2023.03.30

Python의 클래스에 대한 이해


다른 언어와 동일하게 python에서도 클래스를 이용하여 보다 편리하게 함수를 다룰 수 있다. 참고로 클래스는 데이터나 처리의 정의 등을 하나로 정리해둔 모형과 같은 것이다. 

클래스를 사용하지 않고 함수 작성한다면 보통 다음과 같이 작성한다.

def some_function(something):
    print(something)

그러나 클래스를 이용한다면 기본적으로 다음과 같이 작성하게 된다.

class SomeClass:
    def __init__(self,something):
        self.something = something

    def some_function(self):
        print(self.something)

클래스 구성을 사용하는 메리트는 다음과 같다고 할 수 있다.

  • 글로벌 변수를 없애고, 모든 변수를 어떠한 스코프에 소속시킨다.
  • 몇 번이고 재사용할 수 있다.
  • 코드의 수정을 최소화한다.
  • 함수 실행중에, 함수 자신을 다시 호출하는 처리 등이 가능하게 하다.

 

 

클래스와 인스턴스


Python의 클래스에 정의된 데이터나 함수를 사용하기 위해 "인스턴스"를 생성할 필요가 있다.  인스턴스란, 클래스를 실체화한 것이다. 하나의 클래스에 대해서 인스턴스는 여러 개 생성하는 것도 가능하므로, 각각의 인스턴스에 각각 다른 데이터를 가지도록 할 수 있다. 

다음의 코드에서 a가 인스턴스가 된다. 즉, 아까 살펴 본 클래스(SomeClass)의 인스턴스가 a에 할당되어 있다고 할 수 있다.

a = SomeClass("some_value")

 인스턴스를 생성하는 것으로, 클래스 내에 기재된 함수를 호출할 수 있다. 지금까지 살펴 본 코드를 하나의 코드블록으로 작성하면 아래와 같다.

class SomeClass:
    def __init__(self,something):
        self.something = something

    def some_function(self):
        print(self.something)
        
a = SomeClass("some_value")
a.some_function()

#함수에서 print 내장함수를 사용하고 있으므로 some_value가 리턴된다.

 

 

클래스와 메소드


클래스 내에 기재되어 있는 함수를 다른 말로 메소드라고 부른다. 클래스 내에 여러 개의 메소드를 정의하는 것도 물론 가능하다.

class some_class:
    def __init__(self,something):
        self.something = something

    def some_function1(self):#메소드1
        print(self.something)

    def some_function2(self):#메소드2
        return self.something

 

 

self의 역할


 지금까지 봤던 클래스 안에 있던 self에 대해 찾아보니  "인스턴스 자신", "그 시점의 자신", "메소드의 임의의 인수"등 다양하게 부르고 있었다. 그러나 클래스의 구성을 취득할 때에 정형의 구문으로써 기억해두면 괜찮은 것 같다.

 

 

__init__의 이해


  self와 나란히 클래스 내에 등장하는 __init__에 대해서는 알아보자. __init__에 대해 간단히 정리하자면, 다음과 같다.

  • 컨스트럭터라고 불리는 초기화를 위한 함수(메소드)
  • 인스턴스화를 실시할 때 반드시 처음에 호출되는 특수한 함수
  • 오브젝트 생성(인스턴스를 생성)과 관련하여 데이터의 초기를 실시하는 함수

 __init__()은 반드시 첫 번째 인수로 self를 지정해야한다. self에는 인스턴스 자체가 전달되어 있다. 이로 인해, 최과 메소드 내에 인스턴스 변수를 작성하거나, 참고하는 것이 가능해진다. 클래스를 생성할 때에 지정한 인수는 초기화 메소드의 2 번째부터 작성해 나가면 된다.(something)

class SomeClass:
    def __init__(self,something):#constructor
        self.something = something

 클래스 구성에서 정보를 유지하기 위한 중요한 구성으므로 빼놓을 수 없는 것이라고 생각하면 좋을 것 같다. 이 구문에 의해 객체 생성할 때, 정보의 추가 기재를 간단히 할 수 있다.

 예를 들어, 여러 개의 정보를 변수로하는 클래스 구문에서의 처리를 실행하고 싶은 경우는 다음과 같이 쓸 수 있다.

class MyStatus:
    def __init__(self,age,name,height,weight):
        self.age = age
        self.name = name
        self.height = height
        self.weight = weight

    def print_name(self):
        print(self.name)

    def print_age(self):
        print(self.age)

    def print_height(self):
        print(self.height)

    def print_weight(self):
        print(self.weight)

a = MyStatus(34,"yamada",170,78)

 

참고자료

https://ct-innovation01.xyz/DL-Freetime/python01/

https://uxmilk.jp/39906

https://qiita.com/ishigen/items/2d8b6e6398743f2c8110

 

Pythonのselfとかinitを理解する - Qiita

本投稿のモチベーションとして、これまで2年ほどPythonを使って色々やった中で、未だにselfとかinitという構文を理解し使いこなせていない事に気後れを感じており、GWの10連休を利用して学習

qiita.com


출처

https://engineer-mole.tistory.com/190

'Python' 카테고리의 다른 글

[python] .items는 뭘까?!_딕셔너리  (0) 2023.03.30

 

 

: 현재 페이지 -> 다른 페이지(리소스)

 

'\' : 파일경로 (file:\\\)

자바경로

C:\Class\DB\JDBC

 

'/' : 웹 경로 구분자. 웹(http://)

현재

./WebContent/Example

 

1. 상대경로

기준 : 현재 웹페이지의 소속 폴더가 기준점

        . : 현재 웹페이지가 소속된 폴더

        .. : 현재 웹페이지의 부모 폴더

자식폴더명 : 현재 소속된 폴더의 자식 폴더

현재 위치를 '나'로 기준을 삼고 상대를 찾는 표현

 

2. 절대경로

기준 : 누구나 다 알고있는 동일한 위치를 기준으로 상대를 찾는 표현

'/' 기준 -> '/' 는 웹사이트의 루트 폴더 > "http://localhost:8090" 

'/WebClientTest' == 'WebContent'

 

3. 로컬경로

사용 안함

웹서버가 아니라 브라우저가 동작 중인 로컬 컴퓨터의 경로를 탐색

 

4. 외부경로

http:// 시작

남의 사이트 주소

 

 

WebContent 폴더

: 외부에서(클라이언트) 브라우저로 접근할 수 있는 가장 상위 폴더

: 웹 루트 폴더

 

웹 서버

- C:\ > Class > WebClientTest > WebContent > ex01.htm

 

외부 시각

- http://localhost:8090/WebClientTest/Member/list.htm

- http://localhost:8090 -> 특정 컴퓨터 아파치 톰캣(웹 서버)

- WebClientTest -> 프로젝트명 -> 컨텍스트 루트(Context Root)

- http://localhost:8090/WebClientTest/ -> WebContent

 

http://localhost:8090/

http://localhost:8090/WebClientTest

http://localhost:8090/WebClientTest/ex01.htm

 

 

4가지 경로 표기법 예제

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
     <h1>상대 경로</h1>
     <div><a href ="./ex04.htm">같은 폴더의 다른 페이지 이동하기</a></div>
     <div><a href ="ex04.htm">같은 폴더의 다른 페이지 이동하기</a></div>
     <div><a href ="./Member/list.htm">자식 폴더의 다른 페이지 이동하기</a></div>
     <div><a href ="Member/list.htm">자식 폴더의 다른 페이지 이동하기</a></div>
     <div><a href ="./Member/private/private.htm">자식 폴더의 다른 페이지 이동하기</a></div>
     <div><a href ="Member/private/private.htm">자식 폴더의 다른 페이지 이동하기</a></div>
     <div><a href ="../필기.txt">프로젝트 루트 폴더의 자원으로 이동</a></div>
     
     <h1>절대 경로</h1>
     <div><a href ="/WebClientTest/ex01.htm">절대경로</a></div>
     <div><a href ="/WebClientTest/Member/list.htm">절대경로</a></div>
     <div><a href ="/WebClientTest/Member/private/private.htm">절대경로</a></div>
     <div><a href ="/WebClientTest/Member/list.htm">부모폴더의 다른 페이지 이동하기</a></div>
     
     
     <h1>로컬 경로</h1>
     <div><a href ="ex01.htm">1번예제 (상대)</a></div>
     <div><a href ="/WebClientTest/ex01.htm">1번예제 (절대)</a></div>
     <div><a href ="C:\Users\user\Desktop\Class\WebClient\WebClientTest\WebContent\ex01.htm">1번예제 (로컬)</a></div>
     
     <h1>외부 경로</h1>
     <div><a href = "http://naver.com">네이버 이동하기</a></div>
     <div><a href = "http://www.naver.com">네이버 이동하기</a></div>
     
</body>
</html>

기록용으로 아래의 표기된 출처의 내용과 같습니다.

 

출처

https://sas-study.tistory.com/127

 

 

[HTML] 경로표기법(절대경로, 상대경로)

웹에서 경로표기법 : 현재 페이지 -> 다른 페이지(리소스) '\' : 파일경로 (file:\\\)자바경로C:\Class\DB\JDBC'/' : 웹 경로 구분자. 웹(http://)현재./WebContent/Example 1. 상대경로기준 : 현재 웹페이지의 소속

sas-study.tistory.com

 

편의상 클래스 A, B로 설명.

 

1. <div>태그로 여러 버튼(클래스 B)들을 감싸면서 클래스(A) 지정해주고 

<div class="find-btn">
	<button type="button" class="btn">
</div>

2. 클래스 A의 스타일(css)에 text-align: center로 중앙정렬하고

3. 클래스 B의 스타일(css)에 inline-block 속성을 준다.

<style>
<!-- 클래스 A -->
.find-btn{
	text-align: center;
}

<!-- 클래스 B -->
.btn { 
	display:inline-block;
}

이렇게 왼쪽으로 정렬되어 있는걸 중앙정렬 만들고 싶은 상황

 

<style>태그 안에 클래스 A 속성 넣어주기
<div>태그 이용해서 여러 버튼들(클래스B)를 클래스 A로 묶어주기
처음과 다르게 가운데 정렬된 것을 알 수 있다.

출처:  https://moongom.tistory.com/entry/CSS-%EB%B2%84%ED%8A%BC-%EA%B0%80%EC%9A%B4%EB%8D%B0-%EC%A0%95%EB%A0%AC%ED%95%98%EA%B8%B0-button?category=997297 

'Css' 카테고리의 다른 글

CSS로 버튼을 꾸미는 방법  (0) 2023.02.01

+ Recent posts