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가 아니라서 오류가 난다고 하는데 왜 저런건지모르겠네요..ㅠ,ㅠ
댓글 달기