dukDukz
[Linux] IO 입출력 본문
# stdin stdout
std in
std out 을 통해서 입출력이 가능하다.
1) stdout 출력
$ vi test.js
console.log('hello')
process.stdout.write('world')
$ node test.js
console.log 라는것은 브라우저와 node 에서 쓰이는게 다르다 그냥 같은 명령어로 쓰일 뿐
console.log 라는 것은 process.stdout.write 을 조금 변경해서 쓰이는것이다.
이게 IO 중 out 즉 출력하는 쪽의 내용이다.
2) stdin 입력
process.stdin.resume()
이렇게 하고
$ node test.js 하면 입력만 쭉 받게 된다.
그래서 종료를 하려면 ctrl + c 해야된다.
# nodejs : 논 블록킹 IO
node js 의 장점?
논 블록킹 IO
다른 언어와 다른 점이다!!
싱글 스레드 이기 때문에 가능한것이다..!!
그래서 쭉 입력만 받는것임
그러면 입력받은 거를 출력하고자 한다면?
이벤트 쪽으로 처리를 해야한다.
# stdin 으로 입력받아서 출력하기 (callback 함수 이용)
$ vi test.js
// showData 라는 콜백함수를 만들어주고
process.stdin.on('data',showData)
// 함수는 인자값을 받아줘야한다.
function showData(value){
console.log(value)
}
저장하고 node test.js
하면
hello world
<Buffer 68 65 6c 6c 6f 20 77 6f 72 6c 64 0a>
이런식으로 나온다.
알 수 없는 언어로.. Buffer - 컴퓨터만 알 수 있는 무언가..
저 Buffer 를 우리가 알 수 있는 내용으로 바꿔보자
Buffer to string
process.stdin.resume()
process.stdin.on('data',showData)
function showData(value){
console.log(value.toString('utf8'))
}
value.toString('utf8')
로 바꿔줘야한다.
그러면 이제 인코딩 된 상태로 잘 나오게 된다.
# 특정값이 입력되었을때 stdin 이 끝나도록 해보기
그리고 이제 강제적으로 종료하지 않고 특정값이 들어왔을때 꺼지도록 해보자
process.stdin.resume();
: stdin을 실행하기
process.stdin.resume()
process.stdin.on('data',showData)
function showData(value){
let data = value.toString('utf8')
console.log(data)
if( data === "10"){
process.exit(0)
}
}
이렇게 해준다.
0 은 성공적인 의미로 생각
일단은 이렇게 종료한다는.
근데 10 을 해도 꺼지지는 않음...
data === "10"
그럼 10 일때 true 여야 하는데 그게 안되는거임
입력할 때 tab 이나 enter 같은게 껴있어서 그럼
process.stdin.resume()
process.stdin.setEncoding('utf8')
process.stdin.on('data',showData)
function showData(value){
let data = value.trim()
console.log(data, data==="10")
if( data === "10"){
process.exit(0)
}
}
따로 빼서 인코딩 시키고 data로 보내주는걸로 바꿔준다.
그래서 toString('utf8').trim()
뒤에 공백이나 이런걸 없애주는 녀석을 써줘야함
그러면 이제 10일때 true 가 되면서 종료됨
'웹 개발 > Linux' 카테고리의 다른 글
[Linux] 조건문(if) / 매개변수 / for문 / find (0) | 2021.08.31 |
---|---|
[Linux] 명령어 사용 연습 + 파일로 빼기 (0) | 2021.08.30 |
[Linux] 쉘 스크립트 환경변수 설정 (0) | 2021.08.30 |
[Linux] 셸 스크립트 / zsh로 변경 / 셸 커스터마이징 / alias (0) | 2021.08.30 |
[Linux] 리눅스 환경설정 (0) | 2021.08.30 |