open, read, write에 대한 질문 좀 할려고요.

ekfvoddl83의 이미지

리눅스 초보입니다.

공부하는 도중 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절 예제처럼 하면 자동으로 사용된다는 건가요?

이 부분이 잘 이해가 안되 두번째 질문을 할게요.

좋은 답변 부탁드립니다.

좋은 하루 되세요.

powerson의 이미지

일단, 파일에 대한 연습을 하시면서 tty0를 가지고 하셨군요. tty0 대신, 일반 정규파일에 대한 open/read/write를 처리해보시면 원하시는 결과를 얻으실 수 있으실 거 같습니다. tty0라는 것은 설명대로, 장치파일로써, 해당 파일을 통해서 device와 통신을 할 수 있도록 만든 통로라고 생각하시면 됩니다. 해당 파일을 open에서 장치를 제어하기 위해 ioctl로 제어하거나, 혹은 장치에 data를 전송하기 위한 write를 하시거나, 혹은 장치로부터 data를 읽기 위한 read 등을 수행할 수 있습니다만, 해당 장치에 대한 설정을 필요할 수도 있으니 직접 하시는 것보다는, termios library를 이용하시는게 좀더 수월하지요.

------------------------------------------------------
아직은 젊다. 모든 것을 할 수 있는 나이란 말이지.

------------------------------------------------------
아직은 젊다. 모든 것을 할 수 있는 나이란 말이지.

ekfvoddl83의 이미지

답변 감사합니다.

날씨가 더워지고 있습니다.

더위 조심하세요.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.