ÃÑ ÆäÀÌÁö ¼ö : 3224

Àüü ÇÔ¼ö/¿ë¾î»çÀü
Facebook Joinc ±×·ì   Joinc QA »çÀÌÆ®
ÇöÀçÀ§Ä¡ : Code>C>terminal_size



joinc´Â Firefox¿Í chrome¿¡¼­ Å×½ºÆ® Çß½À´Ï´Ù. IE¿¡¼­´Â Å×À̺íÀÌ ±úÁö°Å³ª À̹ÌÁö°¡ º¸ÀÌÁö ¾ÊÀ» ¼ö ÀÖ½À´Ï´Ù. ƯÈ÷ ±¸±Û DocsÀ̹ÌÁöÀÇ °æ¿ì ¿¢¹Úó¸®µÉ ¼ö ÀÖ½À´Ï´Ù.

  1. get terminal size
  2. °£´ÜÇÑ terminal size ¾ò¾î¿À±â ¿¹Á¦
  3. minzkn
  4. Version 0.1
  5. 2005/06/17

Contents

1 ¼³¸í
2 »ç¿ë¹æ¹ý
3 ÄÚµå
4 ´Ù¸¥¿¹Á¦
5 °ü·Ã °Ô½Ã¹°
6 º¯°æ»çÇ×
6.1 2005/07/06


1 ¼³¸í

ÀÌ°Ç ÇöÀç Å͹̳¯ÀÇ À©µµ¿ì Å©±â¸¦ ¾ò´Â ¿¹Á¦ÀÔ´Ï´Ù. ½Ã±×³Î SIGWINCH °¡ ÇÔ²² »ç¿ëÇϽøé ÁÁ°Ú½À´Ï´Ù.

2 »ç¿ë¹æ¹ý


3 ÄÚµå

/* 
 Copyright (C) Information Equipment co.,LTD. 
 All rights reserved. 
 Code by JaeHyuk Cho <mailto:minzkn@infoeq.com> 
 CVSTAG="$Header: /usr/local/mutihost/joinc/modules/moniwiki/data/text/RCS/Code_2fC_2fterminal_5fsize,v 1.1 2007/01/09 02:46:10 root Exp root $" 
*/ 
 
#include <sys/types.h> 
#include <sys/ioctl.h> 
#include <stdio.h> 
#include <stdlib.h> 
#include <unistd.h> 
#include <errno.h> 
 
int main(void) 
{ 
 int s_check, s_width = 0, s_height = 0; 
 char *s_env; 
 struct winsize s_window_size; 
 s_env = getenv("COLUMNS"); if(s_env != ((char *)0))s_width = atoi(s_env); 
 s_env = getenv("LINES");   if(s_env != ((char *)0))s_height = atoi(s_env); 
 if((s_width <= 0) || (s_height <= 0)) 
 { 
  if(isatty(STDOUT_FILENO) == 1) 
  { 
   do{ s_check = ioctl(STDOUT_FILENO, TIOCGWINSZ, &s_window_size); }while((s_check == (-1)) && (errno == EINTR)); 
   if(s_check == 0)s_width = s_window_size.ws_col, s_height = s_window_size.ws_row; 
  } 
  if(s_width <= 0)s_width = 80; 
  if(s_height <= 0)s_height = 24; 
 } 
 (void)fprintf(stdout, "terminal window size : %d x %d\n", s_width, s_height); 
 return(0); 
} 
 
/* End of source */ 
 

4 ´Ù¸¥¿¹Á¦

  • Å͹̳ÎÀÇ Å©±â°¡ º¯°æµÉ ¶§¸¶´Ù º¯È­µÈ À©µµ¿ì »çÀÌÁ °Ë»çÇØ¼­ Ãâ·ÂÇÏ´Â ÇÁ·Î±×·¥ÀÔ´Ï´Ù.
#include <signal.h> 
#include <sys/ioctl.h> 
#include <stdio.h> 
 
// À©µµ¿ì »çÀÌÁ ¾ò¾î¿Â´Ù. 
struct winsize get_winsize(int fd) 
{ 
    int i; 
    struct winsize size; 
    if (ioctl(fd, TIOCGWINSZ, (char *)&size) < 0) 
    { 
        perror("size get error\n"); 
    } 
    return size; 
} 
void sig_handler(int); 
 
struct winsize c_winsize; 
int main() 
{ 
 
    // Ç¥ÁØÀÔ·ÂÀÌ ÀåÄ¡¿¡ ¿¬°áµÇ¾î ÀÖ´ÂÁö È®ÀÎÇÑ´Ù. 
    if (!isatty(0)) 
        exit(0); 
 
    // ½Ã±×³Î Çڵ鷯¸¦ µî·ÏÇÑ´Ù. 
    if(signal(SIGWINCH, sig_handler) == SIG_ERR) 
    { 
        perror("error : "); 
        exit(0); 
    } 
    c_winsize = get_winsize(0); 
    printf("%d %d %d %d\n", c_winsize.ws_row, c_winsize.ws_col, 
                            c_winsize.ws_xpixel, c_winsize.ws_ypixel); 
 
    // âÀÌ ÀÏÁ¤ »çÀÌÁîÀÌ»óÀÌ µÇÁö ¾ÊÀ»°æ¿ì Á¾·á½ÃŲ´Ù. 
    if (c_winsize.ws_col < 80 || c_winsize.ws_row < 20) 
    { 
        printf("À©µµ¿ì »çÀÌÁî´Â 80, 20ÀÌ»óÀÌ µÇ¾î¾ß ÇÕ´Ï´Ù\n"); 
        exit(0); 
    } 
    while(1) 
    { 
        sleep(10); 
    } 
} 
 
void sig_handler(int signo) 
{ 
    printf("WINSIZE CHANGE\n"); 
    c_winsize = get_winsize(0); 
    printf("%d %d %d %d\n", c_winsize.ws_row, c_winsize.ws_col, 
                            c_winsize.ws_xpixel, c_winsize.ws_ypixel); 
} 
 

5 °ü·Ã °Ô½Ã¹°


6 º¯°æ»çÇ×


6.1 2005/07/06

  1. Å͹̳ÎÀÇ Å©±âº¯°æ½Ã ½Ã±×³ÎÀ» ¾ò¾î¿Í¼­ Å͹̳Πũ±â¸¦ ¾Ë·ÁÁÖ´Â ¿¹Á¦ ÇÁ·Î±×·¥ Ãß°¡
EmailÀ» ±âÀÔÇϸé, ´ñ±ÛÀÌ ¸ÞÀÏ·Î Àü´ÞµË´Ï´Ù.