open, read, write에 대한 질문 좀 할려고요.
리눅스 초보입니다.
공부하는 도중 open, read, write에 대한 질문이 생겨 글을 올리게 됬습니다.
open은 옵션에 따라 파일을 열어주는 거고,
read는 연 파일의 내용을 변수에 저장하는 거고,
write는 연 파일에다 적은 변수에 적힌 내용을 파일에 저장하는 걸로 이했습니다.
그래서 다음과 같이 프로그래밍으 해봤는데 초짜라 어디가 잘못 됬는지 잘 모르겠습니다.
#include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <unistd.h> #include <string.h> void print(); int main(void) { int fd; char buff[BUFSIZ]; fd = open("/dev/tty0", O_WRONLY); memset(buff, 0x00, BUFSIZ); printf("command : "); gets(buff); write(fd, buff, BUFSIZ); close(fd); print(); return 0; } void print() { int fd; char buff[BUFSIZ]; fd = open("/dev/tty0", O_RDONLY); memset(buff, 0x00, BUFSIZ); read(fd, buff, BUFSIZ); printf("OUT : %s\n", buff); close(fd); }
잘못된 곳이 있으면 좀 알려주세요.
그리고 하나더 질문이 있는데요.
http://www.joinc.co.kr/modules/moniwiki/wiki.php/article/terminal
위 페이지에서 2.2절 : 터미널 장치 파일(tty)내용 중에
각각의 터미널은 자신이 사용하는 장치파일에 연결해서 통신을 하게 된다. 예를들어 com1 포트와 시리얼 통신을 해야 한다면 /dev/ttyS0 과 연결을 해야 한다.
그렇지 않고 일반적인 개인 PC 의 표준터미널인 키보드&모니터 와 통신하기를 원한다면 /dev/tty0 과같은 장치파일과 연결해야 할것이다.
이러한 장치파일은 ASCII 코드중 화면에 표시되는 문자(chricter)를 이용해서 통신을 하게 됨으로 캐릭터 디바이스 파일(문자 장치파일) 이라고 부른다.
ls -al 로 위의 파일의 정보를 알아보면 아래와 같을것이다.
이 부분에서 키보드와 모니터간의 통신을 원하면 /dev/tty0 과 같은 장치파일과 연결해야 된다고 되어있는데,
이 장치에 위에 제가 한 프로그램처럼 연결을 하라는 건가요 아니면 위 페이지에서 2.1절 예제처럼 하면 자동으로 사용된다는 건가요?
이 부분이 잘 이해가 안되 두번째 질문을 할게요.
좋은 답변 부탁드립니다.
좋은 하루 되세요.
일단, 파일에 대한
일단, 파일에 대한 연습을 하시면서 tty0를 가지고 하셨군요. tty0 대신, 일반 정규파일에 대한 open/read/write를 처리해보시면 원하시는 결과를 얻으실 수 있으실 거 같습니다. tty0라는 것은 설명대로, 장치파일로써, 해당 파일을 통해서 device와 통신을 할 수 있도록 만든 통로라고 생각하시면 됩니다. 해당 파일을 open에서 장치를 제어하기 위해 ioctl로 제어하거나, 혹은 장치에 data를 전송하기 위한 write를 하시거나, 혹은 장치로부터 data를 읽기 위한 read 등을 수행할 수 있습니다만, 해당 장치에 대한 설정을 필요할 수도 있으니 직접 하시는 것보다는, termios library를 이용하시는게 좀더 수월하지요.
------------------------------------------------------
아직은 젊다. 모든 것을 할 수 있는 나이란 말이지.
------------------------------------------------------
아직은 젊다. 모든 것을 할 수 있는 나이란 말이지.
답변 감사합니다.
답변 감사합니다.
날씨가 더워지고 있습니다.
더위 조심하세요.
댓글 달기