Solaris 에서 시리얼 통신용 프로그램을 만들었는데 tcgetattr 이 동작안합니다. 도와주세요.

withmainre의 이미지

안녕하세요.
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;
}

shint의 이미지

tcgetattr
EBADF
ENOTTY

필요한 내용이 있을지도 모릅니다. ㅇ_ㅇ;;

----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.

매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.

각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com

withmainre의 이미지

tcgetattr을 하면 fd가 터미널 fd가 아니라서 오류가 난다고 하는데 왜 저런건지모르겠네요..ㅠ,ㅠ