Solaris 에서 시리얼 통신용 프로그램을 만들었는데 tcgetattr 이 동작안합니다. 도와주세요.
글쓴이: withmainre / 작성시간: 월, 2013/09/23 - 5:51오후
안녕하세요.
Solaris에서 시리얼 통신용 프로그램을 만드는 중인데요. 중간에 값을 얻어와야 하는 것이있어 tcgetattr을 했는데
return 값이 -1 로 되네요. 내용은 fd가 아니라고 나오는데 이거 어떻게 고치는건가요?
소스 내용은
#include <stdio.h> #include <unistd.h> #include <stdlib.h> #include <locale.h> #include <sys/types.h> #include <errno.h> #include <termios.h> #include <fcntl.h> #include <stropts.h> #include <sys/wait.h> #include <sys/ioctl.h> #include <pwd.h> #include <utmp.h> /* for login_tty */ #include <utmpx.h> int fdm, fds; char *slavename; extern char *ptsname(); struct termios test_term_0; int main(void) { int getrv = 0; fdm = open("/dev/ptmx", O_RDWR); /* open master */ grantpt(fdm); /* change permission of slave */ unlockpt(fdm); /* unlock slave */ slavename = ptsname(fdm); /* get name of slave */ fds = open(slavename, O_RDWR); /* open slave */ getrv = tcgetattr(fds, &test_term_0); // terminal 정보를 얻어온다. printf("get rv = %d ",getrv); return -1 if (fork() == 0) { close(fdm); /* close master */ ioctl(fds, I_PUSH, "ptem"); /* push ptem */ ioctl(fds, I_PUSH, "ldterm"); /* push ldterm */ //exec( /* some program */ ); sleep(1); } close(fds); /* close slave */ ioctl(fdm, I_PUSH, "pckt"); /* push pckt */ //while(1) //{ getrv = tcgetattr(fdm, &test_term_0); // terminal 정보를 얻어온다. printf("get rv = %d ",getrv); return -1 //sleep(1); //} return 0; }
Forums:
이걸로 검색해 보세요
tcgetattr
EBADF
ENOTTY
필요한 내용이 있을지도 모릅니다. ㅇ_ㅇ;;
----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.
매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.
각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com
아직 미해결이네요..ㅠ,ㅠ
tcgetattr을 하면 fd가 터미널 fd가 아니라서 오류가 난다고 하는데 왜 저런건지모르겠네요..ㅠ,ㅠ
댓글 달기