#define printf(fmt, args...) test_print(fmt, ##arg) 에
안녕하세요...
제가 하고자 하는것은 printf의 메세지가 ttyS0 console로 뿌려지기 전에 메세지를 ttyS1으로 뿌리고자 이렇게 구현 할려고 합니다...
커널단에서 바꿀려고 하니까 tty와 연관이 너무 어려워서 application단에서
처리 할려고 합니다...
혹시 다른 방법이라도 있으시면 조언을 부탁드립니다...
#printf(fmt, args...) test_print(fmt, ##args)
int ttyS1_fd;
void test_print(char *fmt, ...)
{
write(ttyS1_fd, fmt, strlen(fmt));
}
int main(void)
{
if((ttyS1_fd = open("/dev/ttyS1", O_RDWR|O_NOCTTY)) < 0){
printf(" /dev/ttyS1" open failed\n");
return 1;
}
while(1){
printf("abcde %d\n", 1);
sleep(1)
}
return 0;
}
// 결과
abcde %d
abcde %d
abcde %d .........
계속 이렇게 출력이 됩니다..
뒤의 인자가 제되로 출력이 되지 않습니다...
제가 의도 하는바는
abcde 1
abcde 1 ........
이렇게 출력하고 자 하는겁니다...
인자를 제대로 출력할려면 어떻게 하는게 좋을까요...? :?:
define을 위와 같이 하면 안되는건지 어떻게 하면
의도 하는되로 출력이 될지 도움을 부탁드립니다...
그럼 즐거운 하루 되세요.
다른 내용은 모르겠지만argument로 ...을 받으면 저렇게 하
다른 내용은 모르겠지만
argument로 ...을 받으면 저렇게 하면 당연히 출력되지 않습니다.
fmt 는 그냥 "abcde %d\n" 이것만을 가리키는 포인터로
뒤의 아규먼트들을 조합해 놓은 것이 아닙니다.
man va_list
를 참고하시기 바랍니다.
http://home.postech.ac.kr/~sodomau
그냥...
그냥 간단하게 stdout을 닫아버리고 /dev/ttyS1을 열면 어떨까 싶군요.
그러면 이런저런 함수 만들것 없이 그냥 printf를 쓰면 될것 같은데...
초기화 할일이 많아서 안되려나요? 파일이나 해본적이 있어서...
그리고, 가변인자가 매크로에 허용되는 컴파일러가 그리 많지 않다는 것도
그리고, 가변인자가 매크로에 허용되는 컴파일러가 그리 많지 않다는 것도 문제가 될 수 있습니다.
아니면...
아니면...
그냥
fprintf(TTYs1_fd, "...")을 사용한다던지요...
이렇게 하니까 되네요...^^
void print(const char *fmt, ...)
{
va_list ap;
int len;
char buf[256];
buf[0] = 0;
va_start(ap, fmt);
len = vsnprintf(buf, sizeof(buf), fmt, ap);
va_end(ap);
write(ttyS1_fd1, buf, strlen(buf));
}
Re: 그냥...
괜찮네요.. ^^
댓글 달기