Setjmp()

c or linux 2005. 2. 11. 22:41

CS360 Lecture notes -- Setjmp

  • Jim Plank
  • Directory: /blugreen/homes/plank/cs360/notes/Setjmp
  • Lecture notes: http://www.cs.utk.edu/~plank/plank/classes/cs360/360/notes/Setjmp/lecture.html

    setjmp()/longjmp()

    Setjmp() and longjmp() are subroutines that let you perform complex flow-of-control in C/Unix.

    One of the keys to understanding setjmp() and longjmp() is to understand machine layout, as described in the assembler and malloc lectures of the past few weeks. The state of a program depends completely on the contents of its memory (i.e. the code, globals, heap, and stack), and the contents of its registers. The contents of the registers includes the stack pointer (sp), frame pointer (fp), and program counter (pc). What setjmp() does is save the contents of the registers so that longjmp() can restore them later. In this way, longjmp() ``returns'' to the state of the program when setjmp() was called.

    Specifically:

    #include < setjmp.h >
    int setjmp(jmp_buf env);
    
    This says to save the current state of the registers into env. If you look in /usr/include/setjmp.h, you'll see that jmp_buf is defined as:
    #define _JBLEN  9
    typedef struct { int _jb[_JBLEN + 1]; } jmp_buf[1];
    
    This is an irritating way of saying that jmp_buf is an array of _JBLEN+1 integers.

    So, when you call setjmp(), you pass it the address of an array of integers, and it stores the value of the registers in that array. Setjmp() returns 0 when you call it in this way.

    longjmp(jmp_buf env, int val);
    
    Longjmp() resets the registers to the values saved in env. This includes the sp, fp and pc. What this means is that longjmp() doesn't return. Instead, when you call it, you return as if you have just called the setjmp() call that saved env. This is because the pc is restored along with the other registers. Setjmp() returns the val argument of longjmp(), which is not allowed to be zero (read the man page). Thus, you know when setjmp() returns a non-zero value that longjmp() was called, and is returning to setjmp().

    As an example, look at the following code (in sj1.c):


    #include < setjmp.h >
    
    main()
    {
      jmp_buf env;
      int i;
    
      i = setjmp(env);
      printf("i = %d\n", i);
    
      if (i != 0) exit(0);
    
      longjmp(env, 2);
      printf("Does this line get printed?\n");
    
    }
    

    When we run this, we get:
    UNIX> sj1
    i = 0
    i = 2
    UNIX>
    
    So, first, we call setjmp(), and it returns 0. Then we call longjmp() with a value of 2, which causes the code to return from setjmp() with a value of 2. That value is printed out, and the code exits.

    Setjmp() and longjmp() are usually used so that if an error is detected within a long string of procedure calls, the error may be dealt with gracefully by a high-level call. For example, look at sj2.c. It looks to be complicated, but really isn't. What happens is that there is a complicated series of procedure calls -- proc_1 through proc_4. If proc_4's argument is zero, then it flags the error by calling longjmp(). Otherwise, things proceed normally. As you can see, if you call sj2 with all positive arguments, then everything is ok. However, if you call it with all zeros, it will make the longjmp() call, and flag an error:

    UNIX> sj2 1 2 3 4
    proc_1(1, 2, 3, 4) = 4
    UNIX> sj2 0 0 0 0
    Error -- bad value of i (0), j (0), k (0), l (0)
    UNIX>
    

    Now, setjmp() saves all the registers, including the sp and fp. What this means is that if you return from a procedure that calls setjmp(), then the env buffer of that setjmp() will no longer be valid. Why? Because that env buffer contains the sp and fp of the calling procedure. If that procedure returns, then when you restore the sp and fp, the stack will be in a different state than before, and you will have an error. For example, look at sj3.c.

    When we execute it, we get the following:

    UNIX> sj3
    Setjmp() returned -- i = 0
    s = Jim
    In B: i=3.  Calling longjmp(env, i)
    Setjmp() returned -- i = 3
    Segmentation fault (core dumped)
    UNIX>
    
    So, exactly what is happening? When the main() routine is first called, the stack looks as follows:
                  Stack        
            |----------------|
            |                |
            |                |
            |                |
            |                |
            |                |
            |                | <-------- sp
            | env[0]         |
            | env[1]         |
            | env[2]         |               pc = main
            | env[3]         |
            | ....           |
            | env[8]         |
            | other stuff    | <------- fp
            |--------------- |
    
    Now, main() calls a(). First it pushes the arguments on the stack in reverse order, and then jsr is called, which pushes the return pc on the stack, and the old fp. The fp and sp are changed to make an empty stack frame for a():
                                         Stack        
                                   |----------------|
                                   |                |
                                   |                | <--------- sp, fp
                    /------------- | old fp in main |
                    |              | old pc in main |
                    |   "Jim" <--- | s = "Jim"      |
                    |         /--- | pointer to env | 
                    |         \--> | env[0]         |
                    |              | env[1]         |
                    |              | env[2]         |               pc = a
                    |              | env[3]         |
                    |              | ....           |
                    |              | env[8]         |
                    \------------> | other stuff    | 
                                   |--------------- |
    

    The first thing that a() does is allocate room its local variable i:

                                         Stack        
                                   |----------------|
                                   |                | <--------- sp
                                   |      i         | <--------- fp
                    /------------- | old fp in main |
                    |              | old pc in main |
                    |   "Jim" <--- | s = "Jim"      |
                    |         /--- | pointer to env | 
                    |         \--> | env[0]         |
                    |              | env[1]         |
                    |              | env[2]         |               pc = a
                    |              | env[3]         |
                    |              | ....           |
                    |              | env[8]         |
                    \------------> | other stuff    | 
                                   |--------------- |
    
    Then it calls setjmp(). This saves the current state of the registers. In other words, it saves the current values of sp, fp, and pc. Now, a() prints "i = 0", and "s = Jim", and then returns to main(). Now the stack looks as before, except that env is initialized to the state of the machine when a() was called:
                                         Stack        
                                   |----------------|
                                   |                |
                                   |                | 
                                   |                |
                                   |                |
                                   |                |
                                   |                | <----------- sp
                                   | env[0]         |
                                   | env[1]         |
                                   | env[2]         |               pc = main
                                   | env[3]         |
                                   | ....           |
                                   | env[8]         |
                                   | other stuff    | <------------ fp
                                   |--------------- |
    
    Now, main() calls b(), and the stack looks as follows:
                                         Stack        
                                   |----------------|
                                   |                |
                                   |                | <--------- sp, fp
                    /------------- | old fp in main |
                    |              | old pc in main |
                    |              | i = 3          |
                    |         /--- | pointer to env | 
                    |         \--> | env[0]         |
                    |              | env[1]         |
                    |              | env[2]         |               pc = b
                    |              | env[3]         |
                    |              | ....           |
                    |              | env[8]         |
                    \------------> | other stuff    | 
                                   |--------------- |
    
    Then longjmp() is called. The registers are restored to their values when a() called setjmp(), and the pc returns from setjmp() in a(). However, the values in the stack are the same as they were for b():
                                         Stack        
                                   |----------------|
                                   |                | <--------- sp
                                   | i = 2          | <--------- fp
                    /------------- | old fp in main |
                    |              | old pc in main |
                    |              | s??    = 3     |
                    |         /--- | pointer to env | 
                    |         \--> | env[0]         |
                    |              | env[1]         |
                    |              | env[2]         |               pc = a
                    |              | env[3]         |
                    |              | ....           |
                    |              | env[8]         |
                    \------------> | other stuff    | 
                                   |--------------- |
    
    You should see the problem. The stack is in a bad state. In particular, a() expects there to be a (char *) where s is, and instead, there is the integer value 3. Thus, when it tries to print out s, it tries to find a string at memory location 3, and dumps core.

    This is a very common bug with setjmp() and longjmp() -- to use them properly, you CANNOT RETURN FROM THE PROCEDURE THAT CALLS setjmp(). As you can see, this bug is subtle -- the stack frame for b() looks a lot like the stack frame for a(), and thus this bug might slip by unnoticed for a while.


    Setjmp() and signals

    One of the nice things about setjmp() and longjmp() is that you can longjmp() out of a signal handler, and back into your program. This lets you catch those signals again.

    Look at sh4.c:

    Note that this program longjmps out of alarm_handler after 8 seconds have passed, and then prints "Gave up". Be sure you can trace through this.


    png.c

    Ok -- in the program

    Look at png.c (which stands for "prime number generator"), there is some really cool stuff going on. Copy it and run it (you'll have to exit with CNTL-C), and then see if you can figure out what's going on. Note that this program may seg-fault. Can you figure out why? Unfortunately, I will not have time to go over this program, but it is a good exercise to see if you can understand it.

    Obviously, you'd do better to use threads to implement something like this.

  • 'c or linux' 카테고리의 다른 글

    POSIX 쓰레드로 멀티 쓰레드 프로그래밍하기  (0) 2005.02.18
    함수 포인터  (0) 2005.02.16
    ctags 활용  (0) 2005.02.15
    #ifdef __cplusplus  (1) 2005.02.12
    C언어 함수  (0) 2005.02.05
    Posted by '김용환'
    ,
    .
    .
    Core Java
Technologies Technical Tips
    .
       View this issue as simple text January 22, 2004    

    In this Issue

    Welcome to the Core Java Technologies Tech Tips for January 22, 2004. Here you'll get tips on using core Java technologies and APIs, such as those in Java 2 Platform, Standard Edition (J2SE).

    This issue covers:

    -Beyond the Basics of JOptionPane
    -Monitoring Class Loading and Garbage Collection

    These tips were developed using Java 2 SDK, Standard Edition, v 1.4.2.

    This issue of the Core Java Technologies Tech Tips is written by John Zukowski, president of JZ Ventures, Inc.

    See the Subscribe/Unsubscribe note at the end of this newsletter to subscribe to Tech Tips that focus on technologies and products in other Java platforms.

    .
    .

    BEYOND THE BASICS OF JOPTIONPANE

    The Swing component set in J2SE includes a special class for creating a panel to be placed in a popup window. You can use this panel to display a message to the user and to get a response from the user. The panel presents content in four areas, one each for an icon, message, input, and buttons. You don't need to use any of the areas, although you would typically present at least a message and a button.

    The icon area is for the display of a javax.swing.Icon. The icon is meant to indicate the type of message being displayed. There are default icons provided by the specific look and feel you use. The default images for these icons are specified through a property setting to the look and feel. The property setting points to the appropriate resource for each message type:

    • OptionPane.informationIcon
    • OptionPane.warningIcon
    • OptionPane.errorIcon
    • OptionPane.questionIcon

    You don't have to change the default properties, though you could with a call to UIManager.put(property name, new resource). With the defaults in place, you simply identify the appropriate message type with a constant of JOptionPane:

    • JOptionPane.PLAIN_MESSAGE
    • JOptionPane.INFORMATION_MESSAGE
    • JOptionPane.WARNING_MESSAGE
    • JOptionPane.ERROR_MESSAGE
    • JOptionPane.QUESTION_MESSAGE

    The plain variety maps to no icon, while the others use a default icon from the look and feel.

    The second area of the JOptionPane is the message area. This is typically used to display a text message. However, you could show any number of objects here. The message type determines how a message is displayed.

    The input area is next. Here is where you can get a response to a message from the user. To prompt for a response you can use a free form text field, a combo box, or even a list control. For Yes/No type prompts, you would instead use the button area, described next.

    Last is the button area, another response-like area. When a user selects a button it signals the end of usage for the JOptionPane. Default sets of button labels are available. (As is the case for icons, these too come from property settings, such as OptionPane.yesButtonText.) You can also provide your own button labels. You can display any number of buttons (including no buttons) with any set of labels. The predefined button label is localized for several languages: English (en), German (de), Spanish (es), French (fr), Italian (it), Japanese (ja), Korean (ko), Swedish (sv), and two varieties of Chinese (zh_CN / zh_TW). If you provide your own labels, you need to localize them yourself.

    The predefined sets of buttons are defined by a set of JOptionPane constants:

    • DEFAULT_OPTION
    • YES_NO_OPTION
    • YES_NO_CANCEL_OPTION
    • OK_CANCEL_OPTION

    Default maps to a single OK button.

    Using JOptionPane

    The JOptionPane class contains seven constructors, each returns a component that you can place anywhere. However, more typically you would use a factory method that creates the component and automatically places it inside a JDialog or JInternalFrame. There are eight of these factory methods (two varieties of four methods) that JOptionPane provides:

    • show[Internal]MessageDialog
    • show[Internal]ConfirmDialog
    • show[Internal]InputDialog
    • show[Internal]OptionDialog

    The Internal variety creates a JOptionPane and shows it in a JInternalFrame. The other variety creates a JOptionPane and shows it in a JDialog. This tip only discusses the dialog variety.

    The message dialog is meant to show a message that the user confirms by selecting the button (or closing the dialog). The message dialog is not meant to return a value.

    In its simplest case, you would use code like the following to show a message dialog:

       JOptionPane.showMessageDialog(
          component, "Hello, World");
    

    The system centers the dialog over the component argument.

    There are two other variations for showing a message dialog. These allow you to customize the window title, customize the message type (to use the default icon), and set a customized icon:

    • showMessageDialog(Component parentComponent,
      Object message,
      String title,
      int messageType)
    • showMessageDialog(Component parentComponent,
      Object message,
      String title,
      int messageType,
      Icon icon)

    The method for showing a confirm dialog has four variations:

    • showConfirmDialog(Component parentComponent,
      Object message)
    • showConfirmDialog(Component parentComponent,
      Object message,
      String title,
      int optionType)
    • showConfirmDialog(Component parentComponent,
      Object message,
      String title,
      int optionType,
      int messageType)
    • showConfirmDialog(Component parentComponent,
      Object message,
      String title,
      int optionType,
      int messageType,
      Icon icon)

    The simplest variation brings up a dialog with a question icon. The dialog displays Select an Option as the title, has Yes, No, and Cancel as button labels.

       JOptionPane.showConfirmDialog(component, "Lunch?");
    

    If you don't like the defaults, you can change them by using one of the other methods. You'll find that everything is changeable with JOptionPane.

    Unlike the message dialog, the confirm dialog does require a return value. Here, you really do want to know which button the user selected. The confirm dialog returns an integer, indicated by one of the following constants of the JOptionPane class:

    • CANCEL_OPTION
    • CLOSED_OPTION (used when the used closed popup window)
    • NO_OPTION
    • OK_OPTION
    • YES_OPTION

    Passing in a setting of OK_CANCEL_OPTION for the option type changes the buttons shown in the confirm dialog to OK and Cancel. Comparing the value returned to the constant, indicates which button the user selected.

    Checking for the return value changes the one line above to quite a few more:

       int returnValue = JOptionPane.showConfirmDialog(
         component, "Lunch?");
       String message = null;
       if (returnValue == JOptionPane.YES_OPTION) {
         message = "Yes";
       } else if (returnValue == JOptionPane.NO_OPTION) {
         message = "No";
       } else if (returnValue == JOptionPane.CANCEL_OPTION) {
         message = "Cancel";
       } else if (returnValue == JOptionPane.CLOSED_OPTION) {
         message = "Closed";
       }
       System.out.println("User selected: " + message);
    

    The input dialog method has six variations. Five return a String:

    • showInputDialog(Object message)
    • showInputDialog(Object message,
      Object initialSelectionValue)
    • showInputDialog(Component parentComponent,
      Object message)
    • showInputDialog(Component parentComponent,
      Object message,
      Object initialSelectionValue)
    • showInputDialog(Component parentComponent,
      Object message,
      String title,
      int messageType)

    One of the variations returns an Object:

    • showInputDialog(Component parentComponent,
      Object message,
      String title,
      int messageType,
      Icon icon,
      Object[] selectionValues,
      Object initialSelectionValue)

    The simplest variation shows the message in a question dialog. The dialog displays Input as the frame title, and has OK and Cancel buttons. Because there is no component provided, the frame is centered over the whole screen.

       String value = JOptionPane.showInputDialog("Name");
    

    As is the case for other types, when you show the input dialog, you can set the parent component, frame title, message type, or icon. However the buttons are fixed at OK and Cancel. You can also set the initial value in the text field.

    The last method variation for the input dialog is special. Instead of offering the user a text field to enter selections, you provide an array of objects (typically strings) from which to choose. Depending on how many values you provide, the look and feel will present either a JComboBox or JList for the user selections. Here's an example that uses this variation. Here an input dialog prompts a user to select a day of the week. The default is the last day of the week. The example uses a smallList for the days of the week.

       String smallList[] = {
         "Sunday",
         "Monday",
         "Tuesday",
         "Wednesday",
         "Thursday",
         "Friday",
         "Saturday"
       };
       String value = 
         (String)JOptionPane.showInputDialog(
           component, 
           "Which Day?", 
           "Day", 
           JOptionPane.QUESTION_MESSAGE, 
           null, // Use default icon
           smallList, 
           smallList[smallList.length-1]);
       System.out.println("Day: " + value);
    

    For a larger list, the code looks essentially the same. Here the list of system properties are used as the choices.

       Object largeList[] = 
         System.getProperties().keySet().toArray();
       String value = 
         (String)JOptionPane.showInputDialog(
           component, 
           "Which Property?", 
           "Property", 
          JOptionPane.QUESTION_MESSAGE, 
           null, 
           largeList, 
           largeList[largeList.length-1]);
    
    
       System.out.println("Property: " + value);
    

    The final dialog type is an all encompassing one, showOptionDialog. There is only one version of the method. Here, you can set everything:

    • showOptionDialog(Component parentComponent,
      Object message,
      String title,
      int optionType,
      int messageType,
      Icon icon,
      Object[] options,
      Object initialValue)

    The only thing new here is the options array. This is how you can customize the set of available buttons. Notice that this is an Object array, not a String array. If the Object is a Component, that component is used in the dialog. This allows you to place icons in the buttons, for instance. More typically, you would provide an array of strings, and their labels would be used as the button labels. The initialValue is then used to select which of the options gets the default selection.

    The showOptionDialog method returns an int. This indicates the position selected from the options array. CLOSED_OPTION is still returned if the user closed the dialog.

       String options[] = {"Yes", "Not Now", "Go Away"};
       int value = JOptionPane.showOptionDialog(
           component,
           "Lunch?",
           "Lunch Time",
           JOptionPane.YES_NO_OPTION, // Need something  
             JOptionPane.QUESTION_MESSAGE,
           null, // Use default icon for message type
           options,
           options[1]);
       if (value == JOptionPane.CLOSED_OPTION) {
         System.out.println("Closed window");
       } else {
         System.out.println("Selected: " + options[value]);
       }
    

    If you don't want buttons, pass in an empty array for the options.

    Adding Word Wrap

    The JOptionPane component has a read-only property (MaxCharactersPerLineCount) for the maximum number of characters per line. By default, this is Integer.MAX_VALUE. By subclassing JOptionPane, you can override this setting. Changing this setting allows the component to word-wrap when a message is really long.

       public static JOptionPane getNarrowOptionPane(
                           int maxCharactersPerLineCount) {
         // Our inner class definition
         class NarrowOptionPane extends JOptionPane {
           int maxCharactersPerLineCount;
           NarrowOptionPane(int maxCharactersPerLineCount) {
             this.maxCharactersPerLineCount = 
               maxCharactersPerLineCount;
           }
           public int getMaxCharactersPerLineCount() {
             return maxCharactersPerLineCount;
           }
         }
    
    
         return new NarrowOptionPane(
           maxCharactersPerLineCount);
       }
    

    By subclassing, you can no longer use the static helper methods such as showMessageDialog. Here's how you manually create and show the component:

       String msg = "This is a really long message. ...";
       JOptionPane pane = getNarrowOptionPane(50);
       pane.setMessage(msg);
       pane.setMessageType(JOptionPane.INFORMATION_MESSAGE);
       JDialog dialog = pane.createDialog(
         component, "Width 50");
       dialog.show();
    

    Of course, you can add a "\n" to the message, but then you have to count the characters per line.

    Message as Object

    At this point you might ask why the message argument to all the showXXXDialog methods is an Object. The answer is that it's because the message argument to all these methods doesn't have to be a String. You can pass in any Object. Each object is "added" to the message area, one on top of the other. For instance, if you pass in an array of two strings, it creates a message on two lines:

       String msg[] = {"Welcome", "Home"};
       JOptionPane.showMessageDialog(component, msg);
    

    The objects you add can be components, icons, or objects. Components are added as such. Icons are shown in a label, as are strings. For other objects, their string representation (toString()) is shown. For instance, the following component can be added to an option pane. As the user changes the selection in the slider, the option pane's value is updated:

       public static JSlider getSlider(
                            final JOptionPane optionPane) {
         JSlider slider = new JSlider();
         slider.setMajorTickSpacing (10);
         slider.setPaintTicks(true);
         slider.setPaintLabels(true);
         ChangeListener changeListener = 
           new ChangeListener() {
           public void stateChanged(
                       ChangeEvent changeEvent) {
             JSlider theSlider = 
                 (JSlider)changeEvent.getSource();
             if (!theSlider.getValueIsAdjusting()) {
               optionPane.setInputValue(
                 new Integer(theSlider.getValue()));
             }
           }
         };
         slider.addChangeListener(changeListener);
         return slider;
       }
    

    Because you have to pass the option pane to the method, here again, you can't use one of the shortcuts to create the dialog:

       JOptionPane optionPane = new JOptionPane();
       JSlider slider = getSlider(optionPane);
       Object msg[] = {"Select a value:", slider};
       optionPane.setMessage(msg);
       optionPane.setMessageType(
         JOptionPane.QUESTION_MESSAGE);
       optionPane.setOptionType(
         JOptionPane.OK_CANCEL_OPTION);
       JDialog dialog = optionPane.createDialog(
           Options.this, "Select Value");
       dialog.show();
       Object value = optionPane.getValue();
       if (value == null || !(value instanceof Integer)) {
         System.out.println("Closed");
       } else {
         int i = ((Integer)value).intValue();
         if (i == JOptionPane.CLOSED_OPTION) {
           System.out.println("Closed");
         } else if (i == JOptionPane.OK_OPTION) {
           System.out.println("OKAY - value is: " +
                      optionPane.getInputValue());
         } else if (i == JOptionPane.CANCEL_OPTION) {
           System.out.println("Cancelled");
         }
       }
    

    Notice that as you start getting fancier with JOptionPane, you lose the ability to use the shortcut methods. And, you have to do special handling of the return value. You first need to use getValue for the JOptionPane to determine which button the user selected. Then, for when the user presses the OK button, you need to use the getInputValue method to get the value from the underlying slider.

    Sounds

    Swing provides for auditory cues related to the four types of icons:

    • OptionPane.errorSound
    • OptionPane.informationSound
    • OptionPane.questionSound
    • OptionPane.warningSound

    By setting these properties, you can get sounds when your option panes are displayed. You can set the individual sounds with lines like the following:

       UIManager.put("OptionPane.questionSound", 
         "sounds/OptionPaneError.wav");
    

    Or set all of them with the system defaults as follows:

       UIManager.put("AuditoryCues.playList",
         UIManager.get("AuditoryCues.defaultCueList"));
    

    Audio cues are disabled by default because they might have problems on some platforms. It is recommended that you use them with care until the issues have been resolved.

    Complete Example

    Here is the source code for a complete example that uses the features explored in this tip.

       import javax.swing.*;
       import javax.swing.event.*;
       import java.awt.*;
       import java.awt.event.*;
       import java.util.Locale;
    
       public class Options extends JFrame {
         private static class FrameShower
             implements Runnable {
           final Frame frame;
           public FrameShower(Frame frame) {
             this.frame = frame;
           }
           public void run() {
             frame.show();
           }
         }
    
         public static JOptionPane getNarrowOptionPane(
             int maxCharactersPerLineCount) {
           // Our inner class definition
           class NarrowOptionPane extends JOptionPane {
             int maxCharactersPerLineCount;
             NarrowOptionPane(
                       int maxCharactersPerLineCount) {
               this.maxCharactersPerLineCount = 
                  maxCharactersPerLineCount;
         }
             public int getMaxCharactersPerLineCount() {
               return maxCharactersPerLineCount;
             }
           }
    
        return new NarrowOptionPane(
                   maxCharactersPerLineCount);
      }
    
         public static JSlider getSlider(
                            final JOptionPane optionPane) {
           JSlider slider = new JSlider();
           slider.setMajorTickSpacing (10);
           slider.setPaintTicks(true);
           slider.setPaintLabels(true);
           ChangeListener changeListener = 
                                new ChangeListener() {
             public void stateChanged(
                               ChangeEvent changeEvent) {
               JSlider theSlider = (
                 JSlider)changeEvent.getSource();
               if (!theSlider.getValueIsAdjusting()) {
                 optionPane.setInputValue(new Integer(  
                   theSlider.getValue()));
               }
             }
           };
           slider.addChangeListener(changeListener);
           return slider;
         }
    
         public Options() {
           super("JOptionPane Usage");
           setDefaultCloseOperation(EXIT_ON_CLOSE);
           Container contentPane = getContentPane();
           contentPane.setLayout(new FlowLayout());
           JButton message = new JButton("Message");
           ActionListener messageListener = 
                                   new ActionListener() {
             public void actionPerformed(ActionEvent e) {
               JOptionPane.showMessageDialog(
                 Options.this, "Hello, World");
             }
           };
           message.addActionListener(messageListener);
           contentPane.add(message);
           JButton confirm = new JButton("Confirm");  
           ActionListener confirmListener = 
            new ActionListener() {
             public void actionPerformed(ActionEvent e) {
               int returnValue = 
                 JOptionPane.showConfirmDialog(
               Options.this, "Lunch?");
               String message = null;           
               if (returnValue == JOptionPane.YES_OPTION) {
                 message = "Yes";
               } else if (
                   returnValue == JOptionPane.NO_OPTION) {
                 message = "No";
               } else if (
                   returnValue == JOptionPane.CANCEL_OPTION) {
                 message = "Cancel";
               } else if (
                   returnValue == JOptionPane.CLOSED_OPTION) {
                 message = "Closed";
               }
               System.out.println("User selected: " + message);
             }
           };
           confirm.addActionListener(confirmListener);
           contentPane.add(confirm);
           JButton inputText = new JButton("Input Text");
           ActionListener inputTextListener = 
                                   new ActionListener() {
             public void actionPerformed(ActionEvent e) {
               String value = 
                 JOptionPane.showInputDialog("Name");
               System.out.println("Name: " + value);
             }
           };
           inputText.addActionListener(inputTextListener);
           contentPane.add(inputText);
           JButton inputCombo = new JButton("Input Combo");
           ActionListener inputComboListener = 
                                     new ActionListener() {
             public void actionPerformed(ActionEvent e) {
               String smallList[] = {
                 "Sunday",
                 "Monday",
                 "Tuesday",
                 "Wednesday",
                 "Thursday",
                 "Friday",
                 "Saturday"
               };
               String value = 
                 (String)JOptionPane.showInputDialog(
                 Options.this, "Which Day?", "Day", 
                 JOptionPane.QUESTION_MESSAGE, null, 
                 smallList, smallList[smallList.length-1]);
               System.out.println("Day: " + value);
             }
           };
           inputCombo.addActionListener(inputComboListener);
           contentPane.add(inputCombo);
           JButton inputList = new JButton("Input List");     
           ActionListener inputListListener = 
                                  new ActionListener() {
            public void actionPerformed(ActionEvent e) {
               Object largeList[] = 
                 System.getProperties().keySet().toArray();
               String value = 
                 (String)JOptionPane.showInputDialog(
                 Options.this, "Which Property?", "Property", 
                 JOptionPane.QUESTION_MESSAGE, null, 
                 largeList, largeList[largeList.length-1]);
                 System.out.println("Property: " + value);
             }
           };              
           inputList.addActionListener(inputListListener);
           contentPane.add(inputList);
           JButton all = new JButton("All");
           ActionListener allListener = 
                                   new ActionListener() {
             public void actionPerformed(ActionEvent e) {
               String options[] = 
                 {"Yes", "Not Now", "Go Away"};
               int value = JOptionPane.showOptionDialog(
                   Options.this,
                   "Lunch?",
                   "Lunch Time",
                   JOptionPane.YES_NO_OPTION, 
                   // Message type
                   JOptionPane.QUESTION_MESSAGE,
                   null, // Use default icon for message type
                   options,
                   options[1]);
               if (value == JOptionPane.CLOSED_OPTION) {
                 System.out.println("Closed window");
               } else {
                 System.out.println(
                   "Selected: " + options[value]);
               }
             }
           };       
           all.addActionListener(allListener);
           contentPane.add(all);
           JButton wide = new JButton("Wide");
           ActionListener wideListener = 
                                   new ActionListener() {
             public void actionPerformed(ActionEvent e) {
               String msg = 
                 "This is a really long message. " + 
                 "This is a really long message. " + 
                 "This is a really long message. " + 
                 "This is a really long message. " + 
                 "This is a really long message. " +
                 "This is a really long message.";
               JOptionPane pane = getNarrowOptionPane(50);
               pane.setMessage(msg);
               pane.setMessageType(
                 JOptionPane.INFORMATION_MESSAGE);
               JDialog dialog = 
                  pane.createDialog(Options.this, "Width 50");
               dialog.show();
             }
           };       
           wide.addActionListener(wideListener);
           contentPane.add(wide);
           JButton twoLine = new JButton("Two Line");
           ActionListener twoLineListener = 
                                   new ActionListener() {
             public void actionPerformed(ActionEvent e) {
               String msg[] = {"Welcome", "Home"};
               JOptionPane.showMessageDialog(
                 Options.this, msg);
             }
           };       
           twoLine.addActionListener(twoLineListener);
           contentPane.add(twoLine);
           JButton slider = new JButton("Slider");
           ActionListener sliderListener = 
                                   new ActionListener() {
             public void actionPerformed(ActionEvent e) {
               JOptionPane optionPane = new JOptionPane();
               JSlider slider = getSlider(optionPane);
               Object msg[] = {"Select a value:", slider};
               optionPane.setMessage(msg);
               optionPane.setMessageType(
                 JOptionPane.QUESTION_MESSAGE);
               optionPane.setOptionType(
                 JOptionPane.OK_CANCEL_OPTION);
                 JDialog dialog = optionPane.createDialog(
                    Options.this, "Select Value");
               dialog.show();
               Object value = optionPane.getValue();
               if (value == null || !(value instanceof Integer)) {
                 System.out.println("Closed");
               } else {
                 int i = ((Integer)value).intValue();
                 if (i == JOptionPane.CLOSED_OPTION) {
                   System.out.println("Closed");
                 } else if (i == JOptionPane.OK_OPTION) {
                   System.out.println("OKAY - value is: " +
                              optionPane.getInputValue());
                 } else if (i == JOptionPane.CANCEL_OPTION) {
                   System.out.println("Cancelled");
                 }
               }
             }
           };
           slider.addActionListener(sliderListener);
           contentPane.add(slider);
           setSize(300, 200);
         }
         
         public static void main(String args[]) {
           UIManager.put("AuditoryCues.playList",
             UIManager.get("AuditoryCues.defaultCueList"));
           JFrame frame = new Options();
           Runnable runner = new FrameShower(frame);
           EventQueue.invokeLater(runner);
         }
       }
    

    For additional information about JOptionPane, see the How to Make Dialogs trail in The Java Tutorial and the javadoc for the JOptionPane class.

    .
    .

    MONITORING CLASS LOADING AND GARBAGE COLLECTION

    Have you ever wondered what classes are loaded when you launch an application or from where the classes are loaded? Have you ever wondered when garbage collection runs or how long it takes? The java command line tool offers several different command line options that you can use to get answers to those questions.

    You might already be familiar with a number of command line options available with the java command line tool, such as -cp, -Xms, and -Xmx. The -cp option is used for specifying the classpath. The -Xms and -Xmx options are used to specify the heap size. For example, instead of setting the CLASSPATH environment variable, you can use the -cp option to tell the system to look in a specific directory for necessary class files:

       java -cp ExampleDir MyExample
    

    Here, the system will look in the ExampleDir subdirectory for the MyExample.class file and anything else needed besides the system classes. The ExampleDir in the command line tells the system to look only in the ExampleDir directory (assume that it's the parent directory). If MyExample.class is located in the current working directory, the system would not find it.

    Two less frequently used command line features report on class loading and garbage collection. The -verbose:class option reports when a class is loaded into the Java virtual machine and from where it came. For instance, if you use the -verbose:class option when loading the SwingSet2 demo that comes with the J2SE 1.4.2 SDK, you get a report on the many different classes that are loaded as part of the demo, such the following two:

       java -verbose:class -jar
           C:\j2sdk1.4.2\demo\jfc\SwingSet2\SwingSet2.jar
    
       [Loaded FilePreviewer]
       [Loaded javax.swing.plaf.TableUI from 
         C:\j2sdk1.4.2\jre\lib\rt.jar]
    

    The first line indicates that the class came from the main JAR for the demo (assuming it was started with java -jar SwingSet2.jar). The second line indicates that the TableUI class was loaded from the rt.jar file that comes with the runtime located in the c:\j2sdk1.4.2\jre directory. (From there, the rt.jar file is located in the lib subdirectory.) Different implementations of the Java platform can have different formats here. The only requirement is that -verbose:class displays messages as classes get loaded and unloaded.

    Let's see when classes are loaded, and how many classes are needed for the following simple program:

        public class Sample {
          public static void main(String args[]) {
            System.out.println("Hello, World");
          }
        }
    

    Compile the Sample class. Then run it with the -verbose:class option enabled:

       java -verbose:class Sample
    

    When you run the command, you'll see that this simple program requires the opening of five jar files (such as rt.jar) and the loading of almost 250 classes.

    To see an example of a class unloading message, try the -verbose:class command line option with the RunItReload class shown in the August 19, 2003 Tech Tip titled Unloading and Reloading Classes.

    The -verbose:gc option reports on each garbage collection event. This includes the time for garbage collection to run, and the before and after heap sizes. This is demonstrated in the following lines:

      [GC 27872K->26296K(42216K), 0.0069590 secs]
      [GC 28973K->26455K(42216K), 0.0036812 secs]
      [GC 29134K->26474K(42216K), 0.0016388 secs]
      [GC 29117K->26487K(42216K), 0.0008859 secs]
      [GC 29134K->26498K(42216K), 0.0009197 secs]
      [GC 29180K->26479K(42216K), 0.0008711 secs]
      [GC 29149K->26484K(42216K), 0.0008716 secs]
    

    Like the output for -verbose:class, there is no requirement for output format, and it is subject to change without notice. The "GC" at the beginning indicates what kind of collection occurred. The number before the "->" is the heap occupancy before the collection. The number after the "->" is the heap occupancy after the collection. The number in parentheses is the currently allocated size of the heap. The seconds are the duration of the collection.

    This information can be useful in debugging. For example, it could help you determine if garbage collection happened at a critical point in time, and might have caused a program to crash. This sometimes happens when mixing Java and C/C++ code with JNI, especially when there is an underlying bug on the C/C++ code side.

    If you're ever curious about why it takes so long for an application to start, or if garbage collection in the middle of an operation appears to cause a problem, be sure to try out these command line options.

    For additional information on these and other command line options, see the documentation on the java command specific to your platform:

  • Linux
  • Windows
  • Solaris

    .
    .
    Reader Feedback
    Excellent   Good   Fair   Poor  

    If you have other comments or ideas for future technical tips, please type them here:

    Comments:
    If you would like a reply to your comment, please submit your email address:
    Note: We may not respond to all submitted comments.

    Have a question about Java programming? Use Java Online Support.

    .
    .

    IMPORTANT: Please read our Terms of Use, Privacy, and Licensing policies:
    http://www.sun.com/share/text/termsofuse.html
    http://www.sun.com/privacy/
    http://developers.sun.com/dispatcher.jsp?uid=6910008


    Comments? Send your feedback on the Core Java Technologies Tech Tips to: http://developers.sun.com/contact/feedback.jsp?category=newslet

    Subscribe to other Java developer Tech Tips:

    - Enterprise Java Technologies Tech Tips. Get tips on using enterprise Java technologies and APIs, such as those in the Java 2 Platform, Enterprise Edition (J2EE).
    - Wireless Developer Tech Tips. Get tips on using wireless Java technologies and APIs, such as those in the Java 2 Platform, Micro Edition (J2ME).

    To subscribe to these and other JDC publications:
    - Go to the JDC Newsletters and Publications page, choose the newsletters you want to
    subscribe to and click "Update".
    - To unsubscribe, go to the
    subscriptions page, uncheck the appropriate checkbox, and click "Update".


    ARCHIVES: You'll find the Core Java Technologies Tech Tips archives at:
    http://java.sun.com/developer/JDCTechTips/index.html


    Copyright 2004 Sun Microsystems, Inc. All rights reserved.
    4150 Network Circle, Santa Clara, CA 95054 USA.


    This document is protected by copyright. For more information, see:
    http://java.sun.com/developer/copyright.html


    Java, J2SE, J2EE, J2ME, and all Java-based marks are trademarks or registered trademarks (http://www.sun.com/suntrademarks/) of Sun Microsystems, Inc. in the United States and other countries.

    Sun Microsystems,
Inc.
  • 'java UI' 카테고리의 다른 글

    File Connection Optiobal Package  (0) 2006.02.28
    [펌] DataSource의 복제를 통한 다중 플레이어 생성방법  (0) 2005.12.02
    jtable tutorial  (0) 2005.02.16
    The Eclipse runtime options  (0) 2005.02.15
    www.eclipse-plugins.info 의 순위  (0) 2005.02.12
    Posted by '김용환'
    ,

     
    Tomcat 4.1.12 버전에서 서블릿 접근이 안되는 경우

    원인

    /conf/web.xml

    파일에서

    invoker 서블릿의 매핑이 보안문제로 막혀있습니다.

        <!-- The mapping for the invoker servlet -->
    <!--
        <servlet-mapping>
            <servlet-name>invoker</servlet-name>
            <url-pattern>/servlet/*</url-pattern>
        </servlet-mapping>
    -->

    examples context 가 되는 이유

    /webapps/examples/WEB-INF/web.xml

    파일에서 invoker 서블릿을 다시 매핑합니다.

    ...

        <!-- Define filter mappings for the defined filters -->
        <filter-mapping>
            <filter-name>Servlet Mapped Filter</filter-name>
     <servlet-name>invoker</servlet-name>
        </filter-mapping>
        <filter-mapping>
            <filter-name>Path Mapped Filter</filter-name>
     <url-pattern>/servlet/*</url-pattern>
        </filter-mapping>

    ...중략...


        <servlet-mapping>
            <servlet-name>invoker</servlet-name>
            <url-pattern>/servlet/*</url-pattern>
        </servlet-mapping>

    ...

     

     

    해결법

    /conf/web.xml 에서

    invoker mapping 을 주석을 풀어줍니다.

        <!-- The mapping for the invoker servlet -->
        <servlet-mapping>
            <servlet-name>invoker</servlet-name>
            <url-pattern>/servlet/*</url-pattern>
        </servlet-mapping>

    dtd 에 의거해서

    security-constraint 엘리먼트를 /conf/web.xml 파일의 welcome-file-list 엘리먼트 아래쪽 <web-app> 에 중첩되게 복사합니다.

    다음과 같을 것입니다.

    ...

        <welcome-file-list>
            <welcome-file>index.html</welcome-file>
            <welcome-file>index.htm</welcome-file>
            <welcome-file>index.jsp</welcome-file>
        </welcome-file-list>

        <security-constraint>
          <display-name>Default Servlet</display-name>
          <!-- Disable direct alls on the Default Servlet -->
          <web-resource-collection>
            <web-resource-name>Disallowed Location</web-resource-name>
        
        <url-pattern>/servlet/org.apache.catalina.servlets.DefaultServlet/*</url-pattern>
            <http-method>DELETE</http-method>
            <http-method>GET</http-method>
            <http-method>POST</http-method>
            <http-method>PUT</http-method>
          </web-resource-collection>
          <auth-constraint>
            <role-name></role-name>
          </auth-constraint>
        </security-constraint>
       

    </web-app>

    그후에 톰캣을 재시동하고 테스트해보면 됩니다.

    /conf/web.xml 파일 첨부합니다.


     

    'web' 카테고리의 다른 글

    [펌] Axis Webservice 설치및 테스트  (0) 2005.09.03
    [펌] web.xml 사용법  (0) 2005.07.23
    web.xml 설명.  (0) 2005.02.04
    server.xml  (0) 2005.02.04
    web.xml  (0) 2005.02.04
    Posted by '김용환'
    ,

    C언어 함수

    c or linux 2005. 2. 5. 03:29
    24. C언어 함수 요약


    이번 부록은 [C언어 이야기] 독자를 위해 준비한 선물입니다. 제 책에서 사용한 함수는 사실 두 개 밖에 없습니다. 책의 처음부터 끝까지 printf() 함수와 scanf() 함수만 사용합니다. 그 외 getch() 함수 등도 잠깐 등장하지만 기타 함수는 거의 사용하지 않았습니다. 아마 컴퓨터 언어 책 중에서 함 수 두 개로만 진행하는 책은 [C언어 이야기]가 유일한 것 같습니다. (^_^)

    이 때문에 다른 함수를 사용해보고 싶은 독자들의 욕구를 충족시키기 위하여 터보C 관련 내용을 간단하게 요약했습니다. 보통 터보C 함수를 설명한 라이브러리 책만 해도 600쪽은 훨씬 넘는 분량입니다. 이것을 최대한 줄여서 부록으로 수록했습니다.

    일단 함수 일람표만 보더라도 도움이 될 것이라 생각합니다. 구체적인 함수 사용법은 이 책 본문에서 설명한 '컴파일러 도움말 보기' 부분을 참고하기 바랍니다. 컴파일러 도움말을 참고하면 사용법을 알 수 있습니다. 특히 볼랜드C++의 경우에는 함수 설명에 예제도 나오기 때문에 함수 사용법을 손쉽게 익힐 수 있습니다. 터보C 함수 중에서 그래픽 관련 함수를 제외한 텍스트 관련 함수는 대부분 볼랜드C++에서도 지원하는 함수입니다. 따라서 볼랜드C++ 사용자에게도 도움이 될 것으로 생각합니다.

    부록인 [터보C 2.0 함수 요약]의 내용은 몇 년 전에 PC통신망에서 받은 문서 파일과 터보C의 내장 도움말을 참고하여 요약한 것입니다. 요약된 내용이라 이 책의 내용만으로
    부록으로 준비한 [터보C 2.0 함수 요약]이 여러분의 C언어 공부에 도움이 되기를 기대합니다.

    24.0.터보C 2.0 함수 목록 (가나다 순)

          [a]

          24.1.1. abort()
          24.1.2. abs()
          24.1.3. absread()
          24.1.4. abswrite()
          24.1.5. access()
          24.1.6. acos()
          24.1.7. allocmem()
          24.1.8. arc()
          24.1.9.asctime()
          24.1.10. asin()
          24.1.11. assert()
          24.1.12. atan()
          24.1.13. atan2()
          24.1.14. atexit()
          24.1.15. atof()
          24.1.16. atoi()
          24.1.17. atol()

          [b]

          24.1.18. bar()
          24.1.19. bar3d()
          24.1.20. bdos()
          24.1.21. bdosptr()
          24.1.22. bioscom()
          24.1.23. biosdisk()
          24.1.24. biosequip()
          24.1.25. bioskey()
          24.1.26. biosmemory()
          24.1.27. biosprint()
          24.1.28. biostime
          24.1.29. brk()
          24.1.30. bserch()

          [c]

          24.1.31. cabs()
          24.1.32. calloc()
          24.1.33. ceil()
          24.1.34. cgets()
          24.1.35. chdir()
          24.1.36. _chmod()
          24.1.37. chmod()
          24.1.38. chsize()
          24.1.39. circle()
          24.1.40. _clear87()
          24.1.41. cleardevice()
          24.1.42. clearerr()
          24.1.43. clearviewport()
          24.1.44.clock()
          24.1.45. _close()
          24.1.46. close()
          24.1.47. closegraph()
          24.1.48. clreol()
          24.1.49. clrscr()     
          24.1.50. coreleft()
          24.1.51. cos()
          24.1.52. cosh()
          24.1.53.country()
          24.1.54.cprintf()
          24.1.55.cputs()
          24.1.56. _creat()
          24.1.57. creat()
          24.1.58. creatnew()
          24.1.59.creattemp
          24.1.60. cscanf()
          24.1.61. ctime()
          24.1.62.ctrlbrk()

          [d]

          24.1.63.delay()
          24.1.64. delline()
          24.1.65. detectgraph()
          24.1.66. difftime()
          24.1.67.disable()
          24.1.68.div()
          24.1.69.dosexterr()
          24.1.70.dostounix()
          24.1.71. drawpoly()
          24.1.72. dup()
          24.1.73. dup2()

          [e]

          24.1.74. ecvt()
          24.1.75. ellips()
          24.1.76. __emit__
          24.1.77. enable
          24.1.78. eof()
          24.1.79. exec계열 함수
          24.1.80. _exit()
          24.1.81. exit()
          24.1.82. exp()

          [f]

          24.1.83. fabs()
          24.1.84. farcalloc()
          24.1.85. farcoreleft()
          24.1.86. farfree()
          24.1.87. farmalloc()
          24.1.88. farrealloc()
          24.1.89. fclose()
          24.1.90. fcloseall()
          24.1.91. fcvt()
          24.1.92. fdopen()
          24.1.93. feof()
          24.1.94. ferror()
          24.1.95. fflush();
          24.1.96. fgetc()
          24.1.97. fgetchar()
          24.1.98. fgetpos()
          24.1.99. fgets()
          24.1.100. filelength()
          24.1.101. fileno()
          24.1.102. fillellipse()
          24.1.103. fillpoly()
          24.1.104. findfirst()
          24.1.105. findnext()
          24.1.106. floodfill()
          24.1.107. floor()
          24.1.108. flushall()
          24.1.109. fmod()
          24.1.110. fnmerge()
          24.1.111. fnsplit()
          24.1.112. fopen()
          24.1.113.FP_OFF()
          24.1.114._fpreset()
          24.1.115. fprintf()
          24.1.116.FP_SEG()
          24.1.117. fputc()
          24.1.118. fputchar()
          24.1.119. fputs()
          24.1.120. fread()
          24.1.121. free()
          24.1.122. freemem()
          24.1.123. freopen()
          24.1.124. frexp()
          24.1.125. fscanf()
          24.1.126. fseek()
          24.1.127. fsetpos()
          24.1.128. fstat()
          24.1.129. ftell()
          24.1.130. ftime()
          24.1.131. fwrite()

          [g]

          24.1.132. gcvt()
          24.1.133. geninterrupt()
          24.1.134. getarccoords()
          24.1.135. getaspectratio()
          24.1.136. getbkcolor()
          24.1.137. getc()
          24.1.138. getcbrk()
          24.1.139. getch()
          24.1.140. getchar()
          24.1.141. getche()
          24.1.142. getcolor()
          24.1.143. getcurdir()
          24.1.144. getcwd()
          24.1.145. getdate()
          24.1.146. getdefaultpalette()
          24.1.147. getdfree()
          24.1.148. getdisk()
          24.1.149. getdrivername()
          24.1.150. getdta()
          24.1.151. getenv()
          24.1.152. getfat()
          24.1.153. getfatd()
          24.1.154. getfillpattern()
          24.1.155. getfillsettings()
          24.1.156. getftime()
          24.1.157. getgraphmode()
          24.1.158. getimage()
          24.1.159. getlinesettings()
          24.1.160. getmaxcolor()
          24.1.161. getmaxmode()
          24.1.162. getmaxx()
          24.1.163. getmaxy()
          24.1.164. getmodename()
          24.1.165. getmoderange()
          24.1.166. getpalette()
          24.1.167. getpalettesize()
          24.1.168. getpass()
          24.1.169. getpixel()
          24.1.170. getpsp()
          24.1.171. gets()
          24.1.172. gettext()
          24.1.173. gettextinfo()
          24.1.174. gettextsettings()
          24.1.175. gettime()
          24.1.176. getvect()
          24.1.177. getverify()
          24.1.178. getviewsettings()
          24.1.179. getw()
          24.1.180. getx()
          24.1.181. gety()
          24.1.182. gmtime()
          24.1.183. gotoxy()
          24.1.184. graphdefaults()
          24.1.185. grapherrormsg()
          24.1.186. _graphfreemem()
          24.1.187. _graphgetmem()
          24.1.188. graphresult()

          [h]

          24.1.189. harderr()
          24.1.190. hardresume()
          24.1.191. hardretn()
          24.1.192. highvideo()
          24.1.193. hypot()

          [i]

          24.1.194. imagesize()
          24.1.195.initgraph()
          24.1.196. inport()
          24.1.197. inportb()
          24.1.198. insline()
          24.1.199. installuserdriver()
          24.1.200. installuserfont()
          24.1.201. int86()
          24.1.202. int86x()
          24.1.203. intdos()
          24.1.204. intdosx()
          24.1.205. intr()
          24.1.206. ioctl()
          24.1.207. isalnum()
          24.1.208. isalpha()
          24.1.209. isascii()
          24.1.210. isatty()
          24.1.211. iscntrl()
          24.1.212. isdigit()
          24.1.213. isgraph()
          24.1.214. islower()
          24.1.215. isprint()
          24.1.216. ispunct()
          24.1.217. isspace()
          24.1.218. isupper()
          24.1.219. isxdigit()
          24.1.220. itoa()

          [k]

          24.1.221. khbit()
          24.1.222. keep()

          [l]

          24.1.223. labs()
          24.1.224. ldexp()
          24.1.225. ldiv()
          24.1.226. lfind()
          24.1.227. line()
          24.1.228. linerel()
          24.1.229. lineto()
          24.1.230. localtime()
          24.1.231. lock()
          24.1.232. log()
          24.1.233. log10()
          24.1.234. longjmp()
          24.1.235. lowvideo()
          24.1.236. _lrotl()
          24.1.237. _lrotr()
          24.1.238. lsearch()
          24.1.239.lseek()
          24.1.240. ltoa()

          [m]

          24.1.241. main()
          24.1.242. malloc()
          24.1.243. _matherr()
          24.1.244. matherr()
          24.1.245. max()
          24.1.246. memccpy()
          24.1.247. memchr()
          24.1.248. memcmp()
          24.1.249. memcpy()
          24.1.250. memicmp()
          24.1.251. memmove()
          24.1.252. memset()
          24.1.253. min()
          24.1.254. mkdir()
          24.1.255. MK_FP()
          24.1.256. mktemp()
          24.1.257. modf()
          24.1.258. movedata()
          24.1.259. moverel()
          24.1.260. movetext()
          24.1.261. moveto()
          24.1.262. movmem()

          [n]

          24.1.263. normvideo()
          24.1.264. nosound()

          [o]

          24.1.265. _open()
          24.1.266. open()
          24.1.267. outport()
          24.1.268. outportb()
          24.1.269. outtext()
          24.1.270. outtextxy()

          [p]

          24.1.271. parsfnm()
          24.1.272. peek()
          24.1.273. peekb()
          24.1.274. perror()
          24.1.275. pieslice()
          24.1.276. poke()
          24.1.277. pokeb()
          24.1.278. poly()
          24.1.279. pow()
          24.1.280. pow10()
          24.1.281. printf()
          24.1.282. putc()
          24.1.283. putch()
          24.1.284. putchar()
          24.1.285. putenv()
          24.1.286. putimage()
          24.1.287. putpixel()
          24.1.288. puts()
          24.1.289. puttext()
          24.1.290. putw()

          [q]

          24.1.291. qsort()

          [r]

          24.1.292. raise()
          24.1.293. rand()
          24.1.294. randbrd()
          24.1.295. randbwr()
          24.1.296. random()
          24.1.297. randomize()
          24.1.298. _read()
          24.1.299. read()
          24.1.300. realloc()
          24.1.301. rectangle()
          24.1.302. registerbgidriver()
          24.1.303. registerbgifont()
          24.1.304. remove()
          24.1.305. rename()
          24.1.306. restorecrtmode()
          24.1.307. rewind()
          24.1.308. rmdir()

          [s]

          24.1.309. sbrk()
          24.1.310. scanf()
          24.1.311. searchpath()
          24.1.312. sector()
          24.1.313. segread()
          24.1.314. setactivepage()
          24.1.315. setallpalette()
          24.1.316. setaspectratio()
          24.1.317. setbkcolor()
          24.1.318. setblock()
          24.1.319. setbuf()
          24.1.320. setcbrk()
          24.1.321. setcolor()
          24.1.322. setdate()
          24.1.323. setdisk()
          24.1.324. setdta()
          24.1.325. setfillpattern()
          24.1.326. setfillstyle()
          24.1.327. setftime()
          24.1.328. setgraphbufsize()
          24.1.329. setgraphmode()
          24.1.330. setjmp()
          24.1.331. setlinestyle()
          24.1.332. setmem()
          24.1.333. setmode()
          24.1.334. setpalette()
          24.1.335. setrgbpalette()
          24.1.336. settextjustify()
          24.1.337. settextstyle()
          24.1.338. settime()
          24.1.339. setusercharsize()
          24.1.340. setvbuf()
          24.1.341. setverify()
          24.1.342. setviewport()
          24.1.343. setvisualpage()
          24.1.344. setwritemode()
          24.1.345. signal()
          24.1.346. sin()
          24.1.347. sinh()
          24.1.348. sleep()
          24.1.349. sopen()
          24.1.350. sound()
          24.1.351. spawn() 계열
          24.1.352. sprintf()
          24.1.353. sqrt()
          24.1.354. srand()
          24.1.355. sscanf()
          24.1.356. stat()
          24.1.357. _status87()
          24.1.358. stime()
          24.1.359. stpcpy()
          24.1.360. strcat()
          24.1.361. strchr()
          24.1.362. strcmp()
          24.1.363. strcmpi()
          24.1.364. strcpy()
          24.1.365. strcspn()
          24.1.366. strdup()
          24.1.367. _strerror()
          24.1.368. strerror()
          24.1.369. stricmp()
          24.1.370. strlen()
          24.1.371. strlwr()
          24.1.372. strncat()
          24.1.373. strncmp()
          24.1.374. strncmpi()
          24.1.375. strncpy()
          24.1.376. strnicmp()
          24.1.377. strnset()
          24.1.378. strpbrk()
          24.1.379. strrchr()
          24.1.380. strrev()
          24.1.381. strset()
          24.1.382. strspn()
          24.1.383. strstr()
          24.1.384. strtod()
          24.1.385. strtok()
          24.1.386. strtol()
          24.1.387. strtoul()
          24.1.388. strupr()
          24.1.389. swab()
          24.1.390. system()

          [t]

          24.1.391. tan()
          24.1.392. tanh()
          24.1.393. tell()
          24.1.394. textattr()
          24.1.395. textbackground()
          24.1.396. textcolor()
          24.1.397. textheight()
          24.1.398. textmode()
          24.1.399. textwidth()
          24.1.400. time()
          24.1.401. tmpfile()
          24.1.402. tmpnam
          24.1.403. toascii()
          24.1.404. _tolower()
          24.1.405. tolower()
          24.1.406. _toupper()
          24.1.407. toupper()
          24.1.408. tzset()

          [u]

          24.1.409. ultoa()
          24.1.410. ungetc()
          24.1.411. ungetch()
          24.1.412. unixtodos()
          24.1.413. unlink()
          24.1.414. unlock()

          [v]

          24.1.415. va_ 로 시작하는 함수
          24.1.416. vfprintf()
          24.1.417. vfscanf()
          24.1.418. vprintf()
          24.1.419. vscanf()
          24.1.420. vsprintf()
          24.1.421. vsscanf()

          [w]

          24.1.422. wherex()
          24.1.423. wherey()
          24.1.424. window()
          24.1.425. _write()
          24.1.426. write()

    24.1.터보C 2.0 함수 요약(가나다 순)


    24.1.1. abort()

    [형식]
    #include <stdlib.h>
    #include <process.h>
    void abort(void);

    [매개변수]
    없음.

    [되돌림값]
    없음.

    [설명] 프로그램 실행을 종료시키는 함수로 stderr(콘솔)에 종결 알림글을 쓰고, 탈출코드 3을 돌려주면서 프로그램 실행을 끝낸다. 이 말은 곧 화면에 "Abnormal Program Termination"이라는 글을 보여준 후 프로그램 실행을 중단시킨다는 뜻이다.

    24.1.2. abs()

    [형식]
    #include <math.h>
    #include <stdlib.h>
    int abs(x);

    [매개변수]
    int x : 절대값을 구하고 싶은 정수

    [되돌림값]
    x의 절대값을 돌려준다.

    [설명] x의 절대값을 구해 돌려준다.

    24.1.3. absread()


    [형식]
    #include <dos.h>
    int absread(dirve, nsects, lsect, buffer);

    [매개변수]
    int drive : 드라이브 번호(A=0, B=1, C=2, D=3,...)
    int nsects : 읽어들일 섹터의 수
    int lsect : 논리적인 섹터 번호의 시작
    void *buffer : 읽어들인 내용을 저장할 버퍼의 포인터

    [되돌림값]
    성공하면 0을 돌려주고, 오류가 발생하면 -1을 돌려준다.

    [설명] 특정한 디스크 섹터를 읽는다. 단 디스크의 논리적인 구조, 파일, FAT, 디렉토리인 경우에는 무시된다.

    24.1.4. abswrite()


    [형식]
    #include <dos.h>
    int abswrite(dirve, nsects, lsect, buffer);

    [매개변수]
    int drive : 드라이브 번호(A=0, B=1, C=2, D=3,...)
    int nsects : 쓰기 시작하는 섹터의 수
    int lsect : 논리적인 섹터 번호의 시작
    void *buffer : 내용을 저장할 버퍼의 포인터

    [되돌림값]
    성공하면 0을 돌려주고, 오류가 발생하면 -1을 돌려준다.

    [설명] 특정한 디스크 섹터에 자료를 쓴다. 단 디스크의 논리적인 구조, 파일, FAT, 디렉토리인 경우에는 무시된다.

    24.1.5. access()


    [형식]
    #include <io.h>
    int abswrite(filename, amode);

    [매개변수]
    char *filename : 파일 이름을 나타내는 문자열
    int amode : 검사 내용

    [되돌림값]
    amode로 상태가 허락되면 0을 돌려주고, 아니면 -1을 돌려준다.

    [설명] 지정된 filename으로 파일의 존재와 상태를 조사한다.
    amode의 값은 다음과 같다.

    00 파일이 존재하는 지 조사한다.
    01 실행시킨다.
    02 쓰는 것을 허락하는 지 조사한다.
    04 읽는 것을 허락하는 지 조사한다.
    06 읽고 쓰는 것을 허락하는 지 조사한다.

    24.1.6. acos()

    [형식]
    #include <math.h>
    double acos(x);

    [매개변수]
    double x : 아크코사인을 구하려는 값

    [되돌림값]
    0부터 파이(pi) 사이의 값을 구해 돌려준다.

    [설명] 입력된 값의 아크코사인을 계산한다. 단 x의 범위는 -1부터 1 사이여야 한다. 범위 외의 값이 입력되면 0을 돌려준다.

    24.1.7. allocmem()

    [형식]
    #include <dos.h>
    int allocmem(size, *segp);

    [매개변수]
    unsigned size : 확보하고 싶은 패러그래프의 수.
    unsigned *segp : 할당된 세그먼트 어드레스를 저장할 장소.

    [되돌림값]
    메모리 세그먼트를 확보하면 -1을 돌려주며, 오류가 발생하면 사용 가능한 블록의 크기를 돌려준다.

    [설명] MS-DOS 호출 기능인 0x48을 실행하여 segp 포인터가 가리키는 곳에서부터 size만큼 메모리 블록을 확보하고 확보된 블록의 세그먼트 어드레스를 돌려준다.

    24.1.8. arc()

    [형식]
    #include <graphics.h>
    void far arc(x, y, stangle, endangle, radius);

    [매개변수]
    int x : x 좌표.
    int y : y 좌표.
    int stangle : 원호의 시작각.
    int endangle : 원호의 종료각.
    int radius : 반지름.

    [되돌림값]
    없음.

    [설명]좌표인 중점(x, y)을 중심으로 원호를 그린다. 이때 stangle = 0 이고 endangle = 360이면 완전한 원을 그리게 된다.

    24.1.9.asctime()


    [형식]
    #include <time.h>
    char *asctime(tblock);

    [매개변수]
    const struct tm *tblock : 시간을 표시하는 구조체의 포인터.

    [되돌림값]
    날짜 시간을 포함하는 문자열 포인터.

    [설명] 날짜와 시간을 ASCII로 변한한다.

    24.1.10. asin()

    [형식]
    #include <math.h>
    double asin(x);

    [매개변수]
    double x : 아크사인을 구하고 싶은 값.

    [되돌림값]
    -pi/2와 pi/2 사이의 값을 돌려준다.

    [설명] 아크사인값을 구해주는 함수다.

    24.1.11. assert()

    [형식]
    #include <assert.h>
    #include <stdio.h>
    void assert(imsi);

    [매개변수]
    int imsi : 연산식

    [되돌림값]
    없음.

    [설명] imsi 연산식이 거짓(0)이면 안내문을 출력하고 프로그램을 끝낸다.

    24.1.12. atan()

    [형식]
    #include <math.h>
    double atan(x);

    [매개변수]
    double x : 아크탄젠트를 구하고 싶은 값

    [되돌림값]
    -pi/2에서 pi/2 사이의 값을 돌려준다.

    [설명] 입력된 값의 아크탄젠트를 구한다.

    24.1.13. atan2()

    [형식]
    #include <math.h>
    double atan2(y,x);

    [매개변수]
    double y : 분자.
    double x : 분모.

    [되돌림값]
    -pi에서 pi 사이의 값을 돌려준다.

    [설명] 입력된 y/x값의 아크탄젠트를 구한다.

    24.1.14. atexit()

    [형식]
    #include <stdlib.h>
    int atexit(func);

    [매개변수]
    atexit_t func : 종료할 때 호출하는 함수.

    [되돌림값]
    종료 때 호출하는 함수가 등록될 경우 0을, 아니면 0 이외의 값을 돌려준다.

    [설명] 프로그램을 종료시킬 때 호출하는 함수를 지정한다. 즉 종료 시에 func가 가리키는 함수를 지정한다.

    24.1.15. atof()

    [형식]
    #include <math.h>
    #include <stdlib.h>
    double atof(s);

    [매개변수]
    const char *s : 부동 소수점 숫자로 변환될 문자열.

    [되돌림값]
    변환에 성공하면 문자열의 변환된 값을, 실패하면 0을 돌려줌.

    [설명] 문자열 s를 double형 실수로 변환한다.

    24.1.16. atoi()

    [형식]
    #include <stdlib.h>
    int atoi(s);

    [매개변수]
    const char *s : 정수로 변환될 문자열.

    [되돌림값]
    변환에 성공하면 문자열의 변환된 값을 돌려주며 변환에 실패하면 0을 돌려준다.

    [설명] 문자열 s를 정수로 변환한다.

    24.1.17. atol()

    [형식]
    #include <stdlib.h>
    long atol(s);

    [매개변수]
    const char *s : 장정수로 변환될 문자열.

    [되돌림값]
    변환에 성공하면 문자열의 변환된 값을 돌려주며 변환에 실패하면 0을 돌려준다.

    [설명] 문자열 s를 장정수(long integer)형으로 변환한다.

    24.1.18. bar()

    [형식]
    #include <graphics.h>
    void far bar(left, top, right, bottom)

    [매개변수]
    int left, top, right, bottom : 각각 화면에 그릴 바의 왼쪽, 위, 오른쪽, 아래 좌표.

    [되돌림값]
    없음.

    [설명] x축 범위가 left에서 right, y축 범위가 top에서 bottom까지의 좌표를 가지는 bar(직사각형 도형)을 그린다. 색상과 패턴은 현재 설정된(설정된 것이 없으면 기본 설정 값) 값으로 채운다.

    24.1.19. bar3d()

    [형식]
    #include <graphics.h>
    void far bar3d(left, top, right, bottom, depth, topflag);

    [매개변수]
    int left, top, right, bottom, depth, topflag : 각각 화면에 그릴 바의 왼쪽, 위, 오른쪽, 아래, 세로 길이, 윗면에 관한 플랙을 표시한다.

    [되돌림값]
    없음.

    [설명] 3차원 형태의 직사각형을 그리며 현재의 패턴과 색상으로 내부를 채운다. 이때 topflag = 0 이면 윗면을 그리지 않으며 그 외일 경우에는 윗면을 그린다.

    24.1.20. bdos()

    [형식]
    #include <dos.h>
    int bdos(dosfun, dosdx, dosal);

    [매개변수]
    int dosfun : 시스템콜 번호.
    unsigned dosdx : DX 레지스터 값.
    unsigned dosal : AL 레지스터 값.

    [되돌림값]
    AX 레지스터 값.

    [설명]DOS 시스템 콜을 직접 접근(access)할 수 있게 해준다. 즉 도스 시스템 콜을 실행하는 함수다.

    24.1.21. bdosptr()

    [형식]
    #include <dos.h>
    int bdosptr(dosfun, argument, dosal);

    [매개변수]
    int dosfun : 시스템콜 번호.
    void argument : DS:DX에 지정하는 포인터 값.
    unsigned dosal : AL 레지스터 값.

    [되돌림값]
    성공하면 AX 레지스터 값을 실패하면 -1을 돌려준다.

    [설명]DOS 시스템 콜을 실행한다.

    24.1.22. bioscom()

    [형식]
    #include <bios.h>
    int bioscom(cmd, abyte, port);

    [매개변수]
    int cmd : 기능 코드.
    char abyte : 수신 자료의 상태.
    int port : 포트 번호.

    [되돌림값]
    16비트 정수로 돌려주며 각 비트별 의미가 다르다.

    [설명]RS 232C 포트를 조작한다.

    24.1.23. biosdisk()

    [형식]
    #include <bios.h>
    int biosdisk(cma, drive, head, track, sector, nsetcts, buffer)

    [매개변수]
    int cmd : 기능 코드.
    int drive : 드라이브.
    int head : 헤드 번호.
    int track : 트랙 번호.
    int sector : 섹터 번호.
    int nsects : 섹터 수.
    void *buffer : 자료를 저장하는 포인터.

    [되돌림값]
    상황에 해당하는 바이트를 돌려준다.

    [설명]BIOS에서 직접 디스크 연산을 하기 위하여 인터럽트0x13을 사용하는 디스크 서비스 함수로 하드 디스크의 파일을 파괴할 수 있다.

    24.1.24. biosequip()

    [형식]
    #include <bios.h>
    int biosequip();

    [매개변수]
    없음.

    [되돌림값]
    상황에 맞는 내용을 16비트로 돌려준다.

    [설명]시스템에 연결된 각종 장비를 조사하여 그 결과를 비트별로 돌려주는 함수로 인터럽트 0x11을 사용한다.

    24.1.25. bioskey()

    [형식]
    #include <bios.h>
    int bioskey(cmd);

    [매개변수]
    int cmd : 기능 코드.

    [되돌림값]
    수행한 일에 따라 값을 돌려준다.

    [설명]BIOS 인터페이스 0x16을 사용하여 직접 키보드 연산을 수행한다.

    24.1.26. biosmemory()

    [형식]
    #include <bios.h>
    int biosmemory();

    [매개변수]
    없음.

    [되돌림값]
    1K 블록에 있는 메모리 크기를 돌려준다.

    [설명]인터럽트 0x12를 사용하여 메모리의 크기를 돌려준다.

    24.1.27. biosprint()

    [형식]
    #include <bios.h>
    long biosprint(cmd, abyte, port);

    [매개변수]
    int cmd : 기능 코드.
    char abyte : 출력 자료 값.
    int port : 포트 번호.

    [되돌림값]
    상황에 따라 구성된 비트 모음으로 돌려준다.

    [설명]인터럽트 0x17을 이용하여 다양한 프린트 기능을 BIOS에서 직접 수행한다.

    24.1.28. biostime

    [형식]
    #include <bios.h>
    ind biostime(cmd, newtime);

    [매개변수]
    int cmd : 기능 코드.
    long newtime : 지정할 시간.

    [되돌림값]
    타이머의 현재값을 돌려준다.

    [설명]BIOS 타이머를 읽거나 타이머 값을 지정한다.

    24.1.29. brk()

    [형식]
    #include <alloc.h>
    int brk(addr);

    [매개변수]
    void *addr : 브레이크 값.

    [되돌림값]
    성공하면 0을, 실패하면 -1을 돌려준다.

    [설명] 데이타 세그먼트의 값을 addr로 변경한다.

    24.1.30. bserch()

    [형식]
    #include <stdlib.h>
    void *bserch(key, base, nelem, width, fcmp);

    [매개변수]
    void *key : 검색하는 키의 값(포인터).
    void *base : 검색하는 배열의 기준 포인터.
    size_t nelem : 요소의 수.
    size_t width : 배열 내의 요소의 바이트 수.

    [되돌림값]
    찾고자 하는 키와 매치되는 첫 번째 요소의 주소를 돌려준다. 발견되지 않으면 0을 돌려준다.

    [설명] 배열의 바이너리 검색을 실행한다.

    24.1.31. cabs()

    [형식]
    #include <math.h>
    double cabs(z);

    [매개변수]
    struct complex z : 절대값을 구하고자 하는 복소수.

    [되돌림값]
    z의 절대값.

    [설명] 복소수 z의 절대값을 구한다.

    24.1.32. calloc()

    [형식]
    #include <stdlib.h>
    #include <alloc.h>
    void *calloc(n, size);

    [매개변수]
    unsigned n : 할당할 메모리 블록의 수.
    unsigned size : 할당할 메모리 블록의 크기.

    [되돌림값]
    확보된 블록의 포인터.

    [설명] size바이트 n개의 메인 메모리를 확보한다. 메모리 블록은 heap 영역에 확보후 0으로 초기화한다.

    24.1.33. ceil()

    [형식]
    #include <math.h>
    double ceil(x);

    [매개변수]
    double x : 올림 하는 부동 소수점 숫자.

    [되돌림값]
    올림된 값.

    [설명] 부동 소수점 숫자 x의 소수점 이하를 올림하여 최대의 정수를 구한다.

    24.1.34. cgets()

    [형식]
    #include <conio.h>
    char *cgets(str);

    [매개변수]
    char *str : 문자열을 저장하는 영역.

    [되돌림값]
    &str[2]값을 돌려준다.

    [설명] 콘솔로부터 문자열을 읽어들여 str이 지정하는 위치에 저장한다.

    24.1.35. chdir()

    [형식]
    #include <dir.h>
    int chdir(path);

    [매개변수]
    char *path : 경로를 나타내는 문자열.

    [되돌림값]
    경로가 변경된 경우에는 0을 실패하면 -1을 돌려준다.

    [설명] 현재 사용중인 디렉토리를 path로 지정된 디렉토리로 변경한다.

    24.1.36. _chmod()

    [형식]
    #include <dos.h>
    #include <io.h>
    int _chmod(path, func[, attrib]);

    [매개변수]
    char *path : 파일을 나타내는 문자열.
    int func : 함수의 기능 선택.
    int attrib : 함수의 속성.

    [되돌림값]
    성공하면 파일 속성을 오류가 나면 -1을 돌려준다.

    [설명] 파일 속성을 가져오거나 지정한다.

    24.1.37. chmod()

    [형식]
    #include <sys\stat.h>
    int chmod(path, amode);

    [매개변수]
    char *path : 파일을 나타내는 문자열.
    int amode : 파일의 접근 상태(access mode).

    [되돌림값]
    파일 모드가 변경되면 0을, 아니면 -1을 돌려준다.

    [설명] amode로 주어진 값에 따라 파일 접근 모드를 지정한다.

    24.1.38. chsize()

    [형식]
    #include <io.h>
    int chsize(handle, size);

    [매개변수]
    int handle : 파일 핸들러 번호.
    long size : 파일 크기.

    [되돌림값]
    성공하면 0을, 실패하면 -1을 돌려준다.

    [설명] 파일 크기를 변경한다.

    24.1.39. circle()

    [형식]
    #include <graphics.h>
    void far circle(x, y, radius);

    [매개변수]
    int x, y, radius : 각각 원 중심의 x 좌표, y 좌표, 반지름을 뜻한다.

    [되돌림값]
    없음.

    [설명] 좌표 x, y를 기준(중점)으로 하는 반지름 radius인 원을 그린다.

    24.1.40. _clear87()

    [형식]
    #include <graphics.h>
    unsigned int _clear87();

    [매개변수]
    없음.

    [되돌림값]
    클리어 전의 부동 소수점 상태

    [설명] 부동 소수점 상태의 워드를 클리어(지운다)한다.

    24.1.41. cleardevice()

    [형식]
    #include <graphics.h>
    void far cleardevice();

    [매개변수]
    없음.

    [되돌림값]
    없음.

    [설명] 그래픽 화면을 클리어한다. 즉 화면 전체를 깨끗하게 지우고 커서 위치를 (0, 0)의 좌표로 지정하여 옮긴다.

    24.1.42. clearerr()

    [형식]
    #include <stdio.h>
    void clearerr(fp);

    [매개변수]
    FILE *fp : 파일 포인터.

    [되돌림값]
    없음.

    [설명] 오류 표시를 다시 지정한다. 스트림의 오류를 다시 지정하고 EOF(파일 끝)에 0을 표시한다.

    24.1.43. clearviewport()

    [형식]
    #include <graphics.h>
    void far clearviewport();

    [매개변수]
    없음.

    [되돌림값]
    없음.

    [설명] 뷰포트를 지우고 현재의 커서 위치를 (0, 0)으로 옮긴다.

    24.1.44.clock()

    [형식]
    #include <time.h>
    clock_t clock();

    [매개변수]
    없음.

    [되돌림값]
    처리된 값을 돌려줌.

    [설명] 두 작업 사이의 시간을 결정하기 위해 사용한다.

    24.1.45. _close()

    [형식]
    #include <io.h>
    int _close(handle);

    [매개변수]
    int handle : 파일 핸들러 번호

    [되돌림값]
    파일을 클로즈시키면 0을, 아니면 -1을 돌려준다.

    [설명] 파일을 클로즈시킨다.(닫는다.)

    24.1.46. close()

    [형식]
    #include <io.h>
    int close(handle);

    [매개변수]
    int handle : 파일 핸들러 번호.

    [되돌림값]
    파일을 클로즈시키면 0을, 아니면 -1을 돌려준다.

    [설명] 파일을 클로즈시킨다.

    24.1.47. closegraph()

    [형식]
    #include <graphics.h>
    void far closegraph(void);

    [매개변수]
    없음.

    [되돌림값]
    없음.

    [설명] 그래픽 시스템을 닫는다. 곧 그래픽 모드를 해제하고 그래픽 모드 이전의 상태(텍스트 상태)로 되돌아간다.

    24.1.48. clreol()

    [형식]
    #include <conio.h>
    void clreol();

    [매개변수]
    없음.

    [되돌림값]
    없음.

    [설명] 텍스트 윈도에서 커서의 현재 위치에서 라인의 끝까지 지운다. 단 커서를 이동시키지 않는다.

    24.1.49. clrscr()

    [형식]
    #include <conio.h>
    void clrscr();

    [매개변수]
    없음.

    [되돌림값]
    없음.

    [설명] 텍스트 상태에서 윈도를 클리어하고 커서 위치를 1,1의 위치로 이동시킨다.

    24.1.50. coreleft()

    [형식]
    #include <alloc.h>
    unsigned coreleft(); /* tity, small, medium 모델의 경우 */
    unsigned long coreleft(); /* compact, large, huge 모델의 경우 */
    [매개변수]
    없음.

    [되돌림값]
    사용하지 않은 메모리 양을 돌려준다.

    [설명] 라지 모델에서는 메모리 heap과 stack 영역 사이에서 사용하지 않는 메모리 양을 구하고, 스몰 모델에서는 stack과 세그먼트 사이의 사용하지 않는 메모리 양을 구해준다.

    24.1.51. cos()

    [형식]
    #include <math.h>
    double cos(x);

    [매개변수]
    double x : 계산하려는 값.

    [되돌림값]
    입력한 값의 코사인 값.

    [설명] 코사인 값을 계산해준다.

    24.1.52. cosh()

    [형식]
    #include <math.h>
    double cosh(x);

    [매개변수]
    double x : 계산하려는 값.

    [되돌림값]
    입력한 값의 하이퍼볼릭 코사인 값.

    [설명] 하이퍼볼릭 코사인 값을 계산해준다.

    24.1.53.country()

    [형식]
    #include <dos.h>
    struct country *country(code, cp);

    [매개변수]
    int code : 나라별 코드.
    struct country *cp : 나라별 정보 저장 구조체를 나타내는 포인터.

    [되돌림값]
    성공하면 구조체 포인터 cp를 돌려주고 실패하면 NULL을 돌려준다.

    [설명] 나라별 정보의 형식화 방법을 지정한다.

    24.1.54.cprintf()

    [형식]
    #include <conio.h>
    int cprintf(format[,argument,...]);

    [매개변수]
    char *format : 포맷 지정 문자열.
    argument : 매개변수 목록.

    [되돌림값]
    출력한 문자 수를 돌려준다.

    [설명] 화면에 포맷으로 지정한 출력을 실시한다.

    24.1.55.cputs()

    [형식]
    #include <conio.h>
    int cputs(str);

    [매개변수]
    char *str : 출력할 문자열

    [되돌림값]
    마지막으로 출력한 문자열을 돌려준다.

    [설명] 화면에 문자열을 출력한다.

    24.1.56. _creat()

    [형식]
    #include <dos.h>
    #include <io.h>
    int _creat(path, attrib);

    [매개변수]
    char *path : 파일 이름
    int attrib : 파일 속성

    [되돌림값]
    성공하면 파일 핸들러를 돌려주고, 실패하면 -1을 돌려준다.

    [설명] 새로운 파일을 만든다. 파일은 읽고 쓸 수 있게 오픈되며 바이너리 모드로 오픈된다. 만약 같은 이름의 파일이 이미 있다면 파일의 크기를 0으로 다시 지정하게 되므로 이전 파일의 내용은 삭제된다.

    24.1.57. creat()

    [형식]
    #include <sys\stat.h>
    #include <io.h>
    int creat(path, mode);

    [매개변수]
    char *path : 파일 이름
    int mode : 파일 상태

    [되돌림값]
    성공하면 파일 핸들러를 돌려주고, 실패하면 -1을 돌려준다.

    [참고] 새로운 파일을 만들며, 같은 이름의 파일이 존재하면 그 속성은 유지하고 파일을 새로 만든다. 따라서 모드는 새롭게 작성되는 파일에만 적용되며 stat.h에 모드 값이 정의되어 있다.

    24.1.58. creatnew()

    [형식]
    #include <dos.h>
    #include <io.h>
    int creatnew(path, attrib);

    [매개변수]
    char *path : 파일 이름을 나타내는 문자열.
    int attrib : 파일 속성.

    [되돌림값]
    성공하면 파일 핸들러를 돌려주고, 실패하면 -1을 돌려준다.

    [설명] 새로운 파일을 만든다. 단 이미 같은 이름의 파일이 존재할 때는 기존 파일을 건드리지 않고 오류 값을 돌려준다.

    24.1.59.creattemp

    [형식]
    #include <dos.h>
    #include <io.h>
    int creattemp(path, attrib);

    [매개변수]
    char *path : 파일 이름을 나타내는 문자열.
    int attrib : 파일 속성.

    [되돌림값]
    성공하면 파일 핸들러를 돌려주고, 실패하면 -1을 돌려준다.

    [설명] 해당 경로에 파일을 만든다.

    24.1.60. cscanf()

    [형식]
    #include <conio.h>
    int cscanf(format[, address,...]);
    char *ctime(t);

    [매개변수]
    char *format : 형식을 지정하는 문자열.
    address : 자료 저장 포인터를 나타내는 문자열.

    [되돌림값]
    입력된 필드의 수를 돌려주며, 파일의 끝일 때는 EOF를 돌려준다.

    [설명] 콘솔로부터 format 형식에 따라 입력한다.

    24.1.61. ctime()

    [형식]
    #include <time.h>
    char *ctime(time);

    [매개변수]
    time_t time : 변환할 시각.

    [되돌림값]
    날짜 시간의 문자열 포인터를 돌려준다.

    [설명] 날짜와 시간을 문자열로 바꾸어준다.

    24.1.62.ctrlbrk()

    [형식]
    #include <dos.h>
    void ctrlbrk(handler);

    [매개변수]
    int (*handler)

    [되돌림값]
    없음.

    [설명] 컨트롤 브레이크 핸들러를 지정한다.

    24.1.63.delay()

    [형식]
    #include <dos.h>
    void delay(milliseconds);

    [매개변수]
    unsigned milliseconds : 지연시키는 시간으로 1천 분의 1초 단위다.

    [되돌림값]
    없음.

    [설명] 지정된 시간만큼 시간을 지연시킨다. 따라서 다음 작업까지 작업을 멈추는 효과를 가진다.

    24.1.64. delline()

    [형식]
    #include <conio.h>
    void delline();

    [매개변수]
    없음.

    [되돌림값]
    없음.

    [설명] 현재의 텍스트 창에서 현재 커서가 위치한 줄을 지운다.

    24.1.65. detectgraph()

    [형식]
    #include <graphics.h>
    void far detectgraph(graphdriver, graphmode);

    [매개변수]
    int far *graphdriver : 그래픽 드라이버 종류.
    int far *graphmode : 그래픽 모드.

    [되돌림값]
    없음.

    [설명] 그래픽 드라이버와 모드를 설정한다. 현재의 하드웨어 상태를 조사해 모드를 설정하는 함수로 그래픽 모드로 전환할 때 사용한다.

    24.1.66. difftime()

    [형식]
    #include <time.h>
    double difftime(time1, time2)

    [매개변수]
    time_t time1 : 시작 시각.
    time_t time2 : 종료 시각.

    [되돌림값]
    두 시각 사이의 시간 차이를 초 단위로 돌려준다.

    [설명] 두 시각 차이의 시간 차를 계산한다.

    24.1.67.disable()

    [형식]
    #include <dos.h>
    void disable();

    [매개변수]
    없음.

    [되돌림값]
    없음.

    [설명] NMI 인터럽트를 제외한 인터럽트를 금지시킨다.

    24.1.68.div()

    [형식]
    #include <stdlib.h>
    div_t div(number, denom);

    [매개변수]
    int number : 나누고자 하는 수.
    int denom : 나누는 수.

    [되돌림값]
    나머지와 몫을 돌려준다.

    [설명] 정수를 나누어 몫과 나머지를 구한다.

    24.1.69.dosexterr()

    [형식]
    #include <dos.h>
    int dosexterr(eblkp);

    [매개변수]
    struct DOSERROR *eblkp : 오류 정보를 저장하는 구조체의 포인터.

    [되돌림값]
    exterror 값을 돌려준다.

    [설명] DOS 호출 실패 때 확장 오류 코드를 구해준다.

    24.1.70.dostounix()

    [형식]
    #include <dos.h>
    int dostounix(d, t);

    [매개변수]
    struct date *d : 날짜 나타내는 구조체 포인터.
    struct date *t : 시각 나타내는 구조체 포인터.

    [되돌림값]
    유닉스 형태의 날짜와 시각을 돌려준다.

    [설명] 날짜와 시각을 UNIX 형태로 변환시킨다.

    24.1.71. drawpoly()

    [형식]
    #include <graphics.h>
    void far drawpoly(numpoints, polypoints);

    [매개변수]
    int numpoints : 다각형의 꼭지점 수.
    int *polypoints : 꼭지점 좌표값 포인터.

    [되돌림값]
    없음.

    [설명] 다각형을 그린다.

    24.1.72. dup()

    [형식]
    #include <io.h>
    int dup(handle);

    [매개변수]
    int h : 핸들러 번호.

    [되돌림값]
    성공하면 핸들러 번호를, 실패하면 -1을 돌려줌.

    [설명] 현재 열린 파일 핸들러를 복사해 만든다.

    24.1.73. dup2()

    [형식]
    #include <io.h>
    int dup2(handle1, handle2);

    [매개변수]
    int handle1, handle2 : handle1은 원래의 핸들러이고, handle2는 새로운 핸들러다.

    [되돌림값]
    성공하면 0을, 실패하면 -1을 돌려줌.

    [설명] handle1을 참고하여 handl2로 복사해 만든다.

    24.1.74. ecvt()

    [형식]
    #include <stdlib.h>
    char *ecvt(value, ndig, dec, sign);

    [매개변수]
    double val : 변환되는 숫자.
    int ndig : 자리수.
    int *dec : 소수점의 위치를 저장하는 정수 포인터.
    int *sign : 0이면 +, 아니면 -를 표시.

    [되돌림값]
    숫자의 문자열 자료.

    [설명] float형 숫자를 문자열로 바꾸어준다.

    24.1.75. ellips()

    [형식]
    #include <graphics.h>
    void far ellips(x, y, stangle, endangle, xradius, yradius);

    [매개변수]
    int x, y, stangle, endangle, xradius, yradius : 타원 중심의 x, y 좌표, 개시각, 종료각, X방향 반지름, Y방향 반지름.

    [되돌림값]
    없음.

    [설명] 타원의 원호를 그린다.

    24.1.76. __emit__

    [형식]
    #include <dos.h>
    void __emit__(argument, ...);

    [매개변수]
    argument : 매개변수 목록.

    [되돌림값]
    없음.

    [설명] 인수의 수를 프로그램 안에 기입한다.

    24.1.77. enable

    [형식]
    #include <dos.h>
    void enable();

    [매개변수]
    없음.

    [되돌림값]
    없음.

    [설명] 하드웨어 인터럽트를 허가한다

    24.1.78. eof()

    [형식]
    #include <io.h>
    int eof(handle);

    [매개변수]
    int handle : 파일 핸들러 번호

    [되돌림값]
    파일 끝이면 1을, 아니면 0을, 오류면 -1을 돌려준다.

    [설명] handle가 파일의 끝인지 조사한다.

    24.1.79. exec계열 함수

    [형식]
    #include <process.h>
    int execl(path, arg0, ... , argn, NULL);
    int execle(path, arg0, ... , argn, NULL, env);
    int execlp(path, arg0, ... , argn, NULL);
    int execlpe(path, arg0, ... , argn, NULL, env);
    int execv(path, argv[]);
    int execve(path, argv[], env);
    int execvp(path, argv[]);
    int execvpe(path, argv[], env);

    [매개변수]
    char *path : 실행할 파일 경로(파일 이름).
    char *arg0, ..., argn : 매개변수 목록.
    char *env : 환경 변수를 나타내는 포인터.
    char *argv[] : 인수를 나타내는 문자열 목록의 포인터.
    NULL : 인수의 마지막을 표시.

    [되돌림값]
    성공하면 없고, 실패하면 -1을 돌려준다.

    [설명] path로 지정된 파일을 로드하고 실행한다.

    24.1.80. _exit()

    [형식]
    #include <process.h>
    #include <stdlib.h>
    void _exit(status);

    [매개변수]
    int status : 종료 때 상황.

    [되돌림값]
    없음.

    [설명]
    프로그램을 종료시킨다.

    24.1.81. exit()

    [형식]
    #include <process.h>
    #include <stdlib.h>
    void exit(status);

    [매개변수]
    int status : 종료 때 상황.

    [되돌림값]
    없음.

    [설명]
    프로그램을 종료시킨다.

    24.1.82. exp()

    [형식]
    #include <math.h>
    double exp(x);

    [매개변수]
    double x : 지수 함수의 값을 구하는 값.

    [되돌림값]
    지수 함수 e의 X 제곱값을 돌려준다.

    [설명] 지수 함수값인 e의 X 제곱값을 구한다.

    24.1.83. fabs()

    [형식]
    #include <math.h>
    double fabs(x);

    [매개변수]
    double x : 절대값을 구하려는 수.

    [되돌림값]
    x의 절대값.

    [설명] 숫자 x의 절대값을 구한다.

    24.1.84. farcalloc()

    [형식]
    #include <alloc.h>
    void far *farcalloc(n, size);

    [매개변수]
    unsigned long n : 블록 할당 갯수.
    unsigned long size : 블록의 길이.

    [되돌림값]
    성공하면 확보된 블록의 포인터를, 메모리가 부족하면 NULL을 돌려준다.

    [설명] 파힙(far heap)에서 메모리를 확보한 후 0으로 초기화한다.

    24.1.85. farcoreleft()

    [형식]
    #include <alloc.h>
    unsigned long farcoreleft();

    [매개변수]
    없음.

    [되돌림값]
    파힙에서 사용하지 않은 메모리의 양.

    [설명] 파힙에서 사용하지 않은 메모리를 복귀시킨다.

    24.1.86. farfree()

    [형식]
    #include <alloc.h>
    void far farfree(block);

    [매개변수]
    void far *block : 해제되는 메모리 블록.

    [되돌림값]
    없음.

    [설명] 파힙에서 block으로 확보된 블록을 해제한다.

    24.1.87. farmalloc()

    [형식]
    void far *farmalloc(nbytes);

    [매개변수]
    unsigned long nbytes : 확보하는 메모리 양.

    [되돌림값]

    [설명] nbytes만큼의 메모리를 파힙에서 확보한다.

    24.1.88. farrealloc()

    [형식]
    #include <alloc.h>
    void far *farrealloc(oldblock, nbytes);

    [매개변수]
    void far *oldblock : 이미 확보하고 있는 메모리의 포인터.
    unsigned long nbytes : 새롭게 확보할 크기.

    [되돌림값]
    성공하면 확보된 블록의 주소를 돌려주고, 실패하면 NULL을 돌려준다.

    [설명] oldblock 으로 지정된 파힙 메모리 블록을 nbytes 크기로 다시 변경한다.

    24.1.89. fclose()

    [형식]
    #include<stdio.h>
    int fclose(fp);

    [매개변수]
    FILE *fp: 닫는 파일 포인터.

    [되돌림값]
    정상 종료면 0을, 오류가 나면 EOF(-1)를 돌려준다..

    [설명] 지정된 스트림을 닫는다.

    24.1.90. fcloseall()

    [형식]
    #include <stdio.h>
    int fcloseall();

    [매개변수]
    없음.

    [되돌림값]
    성공하면 닫히는 모든 스트림의 수를 돌려주고, 실패하면 EOF를 돌려준다.

    [설명] 모든 스트림을 닫는다.

    24.1.91. fcvt()

    [형식]
    #include <stdio.h>
    char *fcvt(val, ndig, dec, sign);

    [매개변수]
    doubl val: 변환될 숫자.
    int ndig : 자리수.
    int *dec : 소수점의 위치를 저장하는 정수의 포인터.
    int *sign : 부호를 저장하는 정수의 포인터. 양수면 0이고, 음수이면 이외의 값임.

    [되돌림값]
    스태틱 데이터.

    [설명] float형 수치 val을 문자열로 변환한다.

    24.1.92. fdopen()

    [형식]
    #include <stdio.h>
    FILE fdopen(handle, type);

    [매개변수]
    int handle : 파일 핸들러 번호.
    char *type : 파일 타입.

    [되돌림값]
    새롭게 오픈된 스트림의 포인터. 오류가 나면 NULL을 돌려준다.

    [설명] 이미 열려있는 스트림을 표준 입출력 파일로 다시 사용할 수 있도록 파일 핸들러와 관련시킨다.

    24.1.93. feof()

    [형식]
    #include <stdio.h>
    int feof(stream);

    [매개변수]
    FILE *stream : 열려 있는 파일 포인터

    [되돌림값]
    파일의 끝을 발견하면 0 이외의 값을, 발견 못하면 0을 돌려준다.

    [설명] 스트림에서 파일의 끝 표시를 찾는다.

    24.1.94. ferror()

    [형식]
    #include <stdio.h>
    int ferror(stream);

    [매개변수]
    FILE *stream : 파일 포인터.

    [되돌림값]
    오류가 발견되면 0 이외의 값을 돌려준다.

    [설명] 오류를 발견하는 함수로 스트림에서 읽거나 쓸 때 오류가 발생하면 0이 아닌 값을 돌려준다.

    24.1.95. fflush();

    [형식]
    #include <stdio.h>
    int fflush(stream);

    [매개변수]
    FILE *stream : 스트림의 포인터

    [되돌림값]
    성공하면 0을, 오류가 발견되면 EOF를 돌려준다.

    [설명] 스트림(파일)이 열린 후 관련된 파일 출력을 버퍼로 하며, 버퍼의 내용을 지정한 스트림에 써넣는다.

    24.1.96. fgetc()

    [형식]
    #include <stdio.h>
    int fgetc(fp);

    [매개변수]
    FILE *fp : 파일의 포인터.

    [되돌림값]
    성공하면 읽은 문자를 돌려준다. 파일 끝이거나 오류가 발생하면 EOF를 돌려준다.

    [설명] 현재 위치의 입력 stream에서부터 한 문자를 읽는다.

    24.1.97. fgetchar()

    [형식]
    #include <stdio.h>
    int fgetchar();

    [매개변수]
    없음.

    [되돌림값]
    성공하면 읽은 문자를, 파일 끝이거나 오류가 발생하면 EOF를 돌려준다.

    [설명] 표준 출력장치(=키보드)에서 1문자를 읽어들인다.

    24.1.98. fgetpos()

    [형식]
    #include <stdio.h>
    int fgetpos(fp, pos);

    [매개변수]
    FILE *fp : 파일의 포인터.
    fpos_t *pos : 파일 내 위치를 저장하는 변수 포인터.

    [되돌림값]
    성공하면 0을, 실패하면 0 이외의 값을 돌려준다.

    [설명] 파일 포인터의 위치를 조사한다.

    24.1.99. fgets()

    [형식]
    #include <stdio.h>
    int fgets(s, n, fp);

    [매개변수]
    char *s : 문자열을 저장할 영역.
    int n : 문자열 저장 영역인 s의 크기.
    FILE *fp : 파일의 포인터.

    [되돌림값]
    성공하면 문자열을, 실패하면 NULL을 돌려준다.

    [설명] 스트림에서 문자열을 읽어들인다. 이때 줄바꿈문자 또는 최대 문자수 n-1까지 입력하며, 끝에 '\0'을 붙인다.

    24.1.100. filelength()

    [형식]
    #include <io.h>
    long filelength(handle);

    [매개변수]
    int handle : 파일 핸들러 번호.

    [되돌림값]
    성공하면 파일의 길이를, 오류가 발생하면 -1을 돌려준다.

    [설명] 파일 길이를 조사한다.

    24.1.101. fileno()

    [형식]
    #include <stdio.h>
    int fileno(stream);

    [매개변수]
    FILE *stream : 파일의 포인터.

    [되돌림값]
    파일 핸들러 번호를 돌려준다.

    [설명] st에 연관된 파일 핸들러의 번호를 검사한다.

    24.1.102. fillellipse()

    [형식]
    #include <graphics.h>
    void far fillellipse(x, y, xradius, yradius);

    [매개변수]
    int x : 원 중심의 x 좌표.
    int y : 원 중심의 y 좌표.
    int xradius : x 방향의 반지름.
    int yradius : y 방향의 반지름.

    [되돌림값]
    없음.

    [설명] 좌표 x, y를 중심으로 하는 내부가 전부 칠해진 타원을 그린다.

    24.1.103. fillpoly()

    [형식]
    #include <graphics.h>
    void far filloly(numpoints, polypoints);

    [매개변수]
    int numpoints : 다각형의 꼭지점 수.
    int far *polypoints : 꼭지점 좌표값의 포인터.

    [되돌림값]
    없음.

    [설명] 내부가 칠해진 다각형을 그린다.

    24.1.104. findfirst()

    [형식]
    #include <dir.h>
    #include <dos.h>
    int findfirst(filename, buf, attrib);

    [매개변수]
    char *filename : 파일 이름.
    struct ffblk *ffblk : 파일 내용 나타내는 포인터.
    int attrib : 파일 속성.

    [되돌림값]
    파일을 찾으면 0을, 오류가 있으면 -1을 돌려준다.

    [설명] 디렉토리를 검색해 파일을 찾는다.

    24.1.105. findnext()

    [형식]
    #include <dir.h>
    int findnext(ffblk);

    [매개변수]
    struct ffblk *ffblk : 디렉토리 내용을 저장하는 구조체 포인터.

    [되돌림값]
    파일을 찾으면 0을, 실패하면 -1을 돌려준다.

    [설명] findfirst() 함수로 검색한 후 다음으로 일치하는 파일을 계속 검색한다.

    24.1.106. floodfill()

    [형식]
    #include <graphics.h>
    void far floodfill(x, y, border);

    [매개변수]
    int x, y, border : 개시점의 x, y 좌표와 경계색.

    [되돌림값]
    오류가 발생하면 -7을 돌려준다.

    [설명] 개시점부터 시작해 경계색으로 둘러싼 영역을 빈틈 없이 칠한다.

    24.1.107. floor()

    [형식]
    #include <math.h>
    double floor(x);

    [매개변수]
    double x : 대상이 되는 값

    [되돌림값]
    소수점 이하를 버린 값을 돌려준다.

    [설명] x의 수에서 소수점 이하를 떼어버린 수를 돌려준다. 즉 x보다 크지 않은 가장 큰 정수를 돌려준다.

    24.1.108. flushall()

    [형식]
    #include <stdio.h>
    double flushall();

    [매개변수]
    없음.

    [되돌림값]
    오픈된 수를 정수를 돌려준다.

    [설명] 모든 스트림을 플러시한다. 즉 오픈된 버퍼를 지우고, 파일에 쓴다.

    24.1.109. fmod()

    [형식]
    #include <math.h>
    double fmod(x, f);

    [매개변수]
    double x : 나누어지는 수.
    double y : 나누는 수.

    [되돌림값]
    나머지를 돌려준다.

    [설명] float형의 나머지를 구한다.

    24.1.110. fnmerge()

    [형식]
    #include <dir.h>
    void fnmerge(path, drive, dir, name, ext);

    [매개변수]
    char *path : 경로명.
    char *drive : 드라이브 이름.
    char *dir : 디렉토리 이름.
    char *name : 파일 이름.
    char *ext : 확장자.

    [되돌림값]
    없음.

    [설명] 구성 성분을 합성해 경로를 만든 다음에 path에 저장한다.

    24.1.111. fnsplit()

    [형식]
    #include <dir.h>
    void fnsplit(path, drive, dir, name, ext);

    [매개변수]
    char *path : 경로명.
    char *drive : 드라이브 이름.
    char *dir : 디렉토리 이름.
    char *name : 파일 이름.
    char *ext : 확장자.

    [되돌림값]
    경로의 구성 성분을 표시하는 정수.

    [설명] path로 지정한 전체 경로에서 구성 성분 별로 분리하여 각각 저장한다.

    24.1.112. fopen()


    [형식]
    #include <stdio.h>
    FILE fopen(filename, mode);

    [매개변수]
    char *filename : 파일 이름.
    char *mode : 파일 모드.

    [되돌림값]
    성공하면 새로 오픈한 스트림의 포인터를, 실패하면 NULL을 돌려준다.

    [설명] 지정된 스트림(파일)을 지정된 모드로 연다.

    24.1.113.FP_OFF()

    [형식]
    #include <dos.h>
    unsigned FP_(farpointer);

    [매개변수]
    void far *farpointer : 옵셋값.

    [되돌림값]
    옵셋의 정수값.

    [설명] 파 주소의 옵셋을 구한다.

    24.1.114._fpreset()

    [형식]
    #include <float.h>
    void _fpreset();

    [매개변수]
    없음.

    [되돌림값]
    없음.

    [설명] 부동소수점 패키지를 초기화시킨다.

    24.1.115. fprintf()

    [형식]
    #include <stdio.h>
    int fprintf(fp, format, ...);

    [매개변수]
    FILE *fp : 파일 포인터.
    const char *format : 포맷.
    ... : 생략 가능한 argument. 출력 항목.

    [되돌림값]
    출력된 바이트 수.

    [설명] 파일로 포맷에 의한 출력을 실행한다.

    24.1.116.FP_SEG()

    [형식]
    #include <dos.h>
    unsigned FP_SEG(farpointer)

    [매개변수]
    void far farpointer : 세그먼트 값.

    [되돌림값]
    세그먼트 값을 정수로 표시한 수치.

    [설명] 파 어드레스 세그먼트를 구한다.

    24.1.117. fputc()

    [형식]
    #include <stdio.h>
    int fputc(c, fp);

    [매개변수]
    int c : 출력하는 문자.
    FILE *fp : 파일의 포인터.

    [되돌림값]
    정상적이면 문자 c를 돌려주고, 오류가 나면 EOF를 돌려준다.

    [참고] 스트림으로 1문자를 출력한다.

    24.1.118. fputchar()

    [형식]
    #include <stdio.h>
    int fputchar(c);

    [매개변수]
    int c : 출력할 문자.

    [되돌림값]
    성공하면 문자 c를, 실패하면 EOF를 돌려준다.

    [설명] 표준 출력장치(stdout)에 1문자 c를 출력한다.

    24.1.119. fputs()

    [형식]
    #include <stdio.h>
    int fputs(s, fp);

    [매개변수]
    char *s : 출력하는 문자열.
    FILE *fp : 파일의 포인터.

    [되돌림값]
    성공하면 문자열을 돌려주고, 오류가 발생하면 EOF를 돌려준다.

    [참고] 스트림에 문자열을 출력한다.

    24.1.120. fread()

    [형식] #include <stdio.h>
    void fread(ptr, size, n, fp);

    [매개변수]
    char *ptr : 입력한 내용을 저장하는 영역의 포인터.
    size_t size : 영역의 1블록의 길이.
    size_t n : 블록의 수.
    FILE *fp : 파일의 포인터.

    [되돌림값]
    읽어들인 항목의 수를 돌려준다.

    [설명] 주어진 스트림(파일)으로부터 지정된 수(n)만큼의 자료를 읽어 ptr로 출력한다.

    24.1.121. free()

    [형식]
    #include <stdio.h>
    #include <alloc.h>
    void free(block);

    [매개변수]
    void *block : 해제할 블록의 주소.

    [되돌림값]
    없음.

    [설명] block로 지정한 메모리 블록을 해제한다.

    24.1.122. freemem()

    [형식]
    #include <dos.h>
    int freemem(seg);

    [매개변수]
    unsigned seg : 해제할 블록의 세그먼트 주소.

    [되돌림값]
    성공하면 0을, 실패하면 -1을 돌려준다.

    [설명] allocmem() 함수에 의해 확보한 도스 메모리 블록을 해제한다.

    24.1.123. freopen()

    [형식]
    #include <stdio.h>
    FILE freopen(filename, mode, stream);

    [매개변수]
    char *filename : 파일 이름.
    char *mode : 파일 모드.
    FILE *stream : 원래 파일의 포인터.

    [되돌림값]
    성공하면 스트림 인수를, 실패하면 NULL을 돌려준다.

    [설명] 오픈된 스트림을 다른 스트림으로 대치하여 교환하는 일을 한다.

    24.1.124. frexp()

    [형식]
    #include <math.h>
    double frexp(x, exponent);

    [매개변수]
    double x : 원래 숫자.
    int exponent : 지수부를 저장하는 영역의 포인터.

    [되돌림값]
    x의 지수부를 돌려준다.

    [설명] 주어진 숫자를 가수부와 지수부로 분리해준다.

    24.1.125. fscanf()

    [형식]
    #include <stdio.h>
    fscanf(fp, format [...]);

    [매개변수]
    FILE *fp : 파일 포인터.
    char *format : 포맷.

    [되돌림값]
    성공한 필드의 수를 돌려준다. 파일의 끝을 읽으면 EOF를, 저장하지 못하면 0을 돌려준다.

    [설명] 스트림에서 포맷에 의한 입력을 실행한다.

    24.1.126. fseek()

    [형식]
    #include <stdio.h>
    int fseek(st, offset, origin);

    [매개변수]
    FILE *st : 파일 포인터.
    long offset : 지정하는 판독 위치의 바이트 수.
    int origin : 바이트 계산 기점.

    [되돌림값]
    지정한 곳으로 이동시키면 0을, 그렇지 않으면 0 이외의 값을 돌려준다.

    [설명] 스트림에서 파일 포인터의 위치를 지정하는데 origin에서 offset 바이트 만큼의 새 위치로 포인터를 이동시킨다.

    24.1.127. fsetpos()

    [형식]
    #include <stdio.h>
    int fsetpos(stream, pos);

    [매개변수]
    FILE *stream : 파일의 포인터.
    fpos_t *pos : 원래 위치가 저장된 변수의 포인터.

    [되돌림값]
    정상 종료면 0을, 아니면 0 이외의 값을 돌려준다.

    [설명]
    스트림의 파일 포인터 위치를 지정한다.

    24.1.128. fstat()

    [형식]
    #include <stdio.h>
    int fstat(handle, statbuf);

    [매개변수]
    int handle : 파일 핸들러 번호.
    struct stat *statbuf : 파일 상태 저장하는 영역의 포인터.

    [되돌림값]
    오픈된 파일 정보를 얻으면 0을, 오류가 나면 -1을 돌려준다.

    [설명]
    열려있는 파일의 정보를 얻는다.

    24.1.129. ftell()

    [형식]
    #include <stdio.h>
    long ftell(fp);

    [매개변수]
    FILE *fp : 파일 포인터.

    [되돌림값]
    파일 포인터의 위치를 돌려준다. 오류가 나면 -1을 돌려준다.

    [설명] 현재 파일 포인터를 돌려준다. 즉 파일 포인터의 위치를 구해준다.

    24.1.130. ftime()

    [형식]
    #include <sys\timeb.h>
    void ftime(buf);

    [매개변수]
    struct timeb buf : 시간을 저장하는 변수의 포인터.

    [되돌림값]
    없음.

    [설명] 현재 시간을 timeb 구조체에 저장한다.

    24.1.131. fwrite()

    [형식]
    #include <stdio.h>
    int fwrite(ptr, size, n, fp);

    [매개변수]
    const void *ptr : 저장할 영역.
    size_t size : 영역의 1블록 길이.
    size_t n : 블록 수.
    FILE *fp : 파일의 포인터.

    [되돌림값]
    성공하면 실제로 쓴 항목의 수를 돌려준다.

    [설명] 주어진 파일에 지정된 갯수(n)만큼의 자료를 size 길이로 추가해 쓴다. 즉 스트림으로 출력한다.

    24.1.132. gcvt()

    [형식]
    #include <dos.h>
    char *gcvt(value, ndig, buf);

    [매개변수]
    double value : 변환하는 값.
    int ndig : 유효 자리수.
    char *buf : 결과를 저장할 버퍼.

    [되돌림값]
    buf가 가리키는 문자열의 포인터

    [설명] 부동소수점 숫자를 문자열로 바꾼다.

    24.1.133. geninterrupt()

    [형식]
    #include <stdio.h>
    void geninterrupt(intr_num);

    [매개변수]
    int intr_num : 발생시키는 인터럽트 번호.

    [되돌림값]
    없음.

    [설명]
    소프트웨어 인터럽트를 발생시킨다.

    24.1.134. getarccoords()

    [형식]
    #include <graphics.h>
    void far getarccoords(arccoords);

    [매개변수]
    struct arccoordstype arccoords : arc의 결과를 저장할 구조체의 포인터.

    [되돌림값]
    없음.

    [설명] 맨 마지막에 사용한 arc의 좌표를 돌려준다.

    24.1.135. getaspectratio()

    [형식]
    #include <graphics.h>
    void far getaspectratio(xasp, yasp);

    [매개변수]
    int far *xasp : 수평 방향의 애스펙트비.
    int far *yasp : 수직 방향의 애스펙트비.

    [되돌림값]
    없음.

    [설명] 현재의 그래픽 모드에서 화면의 애스펙트비(종횡비)를 계산한다.

    24.1.136. getbkcolor()

    [형식]
    #include <graphics.h>
    int far getbkcolor(void);

    [매개변수]
    없음.

    [되돌림값]
    현재 배경색을 돌려준다.

    [설명] 현재 배경색을 알아낸다.

    24.1.137. getc()

    [형식]
    #include <stdio.h>
    int getc(fp);

    [매개변수]
    FILE *fp : 문자를 입력하는 파일 포인터.

    [되돌림값]
    성공하면 입력한 문자를, 파일 끝이거나 오류가 발생하면 EIOF를 돌려준다.

    [설명] 스트림에서 1문자를 입력한다. 즉 이미 열린 파일에서 1문자를 읽어들인다.

    24.1.138. getcbrk()

    [형식]
    #include <dos.h>
    int getcbrk();

    [매개변수]
    없음.

    [되돌림값]
    컨트롤 브레이크 상태가 꺼진 상태라면 0을, 켜진 상태면 1을 돌려준다.

    [설명] 컨트롤 브레이크 상태를 알려준다.

    24.1.139. getch()

    [형식]
    #include <conio.h>
    int getch();

    [매개변수]
    없음.

    [되돌림값]
    키보드로 입력한 문자를 돌려준다.

    [설명] 콘솔 즉 키보드에서 한 문자를 입력하며, 화면에 문자를 표시하지 않는다.

    24.1.140. getchar()

    [형식]
    #include <stdio.h>
    int getchar();

    [매개변수]
    없음.

    [되돌림값]
    성공하면 입력한 문자를, 오류가 발생하면 EOF를 돌려준다.

    [설명] 표준 입력 장치인 키보드로 한 문자를 입력한다.

    24.1.141. getche()

    [형식]
    #include <conio.h>
    int getche();

    [매개변수]
    없음.

    [되돌림값]
    입력한 문자를 돌려준다.

    [설명] 콘솔(키보드)에서 한 문자를 입력하며, 화면에 에코 백(표시)한다.

    24.1.142. getcolor()

    [형식]
    #include <graphics.h>
    int far getcolor(void);

    [매개변수]
    없음.

    [되돌림값]
    현재 드로잉 컬러(그림 그리기 색)을 돌려준다.

    [설명] 현재 드로잉 컬러(그림 그리기에 사용하는 색)가 무엇인지 알려준다.

    24.1.143. getcurdir()

    [형식]
    #include <dir.h>
    int getcurdir(drive, directory);

    [매개변수]
    int drive : 현재 드라이브를 검사하는 드라이브 번호.
    char *directory : 현재 디렉토리 이름 저장 영역.

    [되돌림값]
    성공하면 0을, 오류가 나면 -1을 돌려준다.

    [설명] 지정된 드라이브에서 현재 작업 중인 디렉토리 이름을 알아낸다.

    24.1.144. getcwd()

    [형식]
    #include <dir.h>
    int *getcwd(buf, n);

    [매개변수]
    char *buf : 디렉토리 이름 저장 영역.
    int n : 저장 영역의 길이.

    [되돌림값]
    buf 또는 버퍼 포인터를 돌려주며, 오류가 생기면 글로벌 변수 중 하나를 돌려준다.

    [설명] 현재 사용 중인 디렉토리 이름을 얻어 buf에 저장한다.

    24.1.145. getdate()

    [형식]
    #include <dos.h>
    void getdate(datep);

    [매개변수]
    struct date *datep : 날짜를 저장하는 구조체 포인터.

    [되돌림값]
    없음.

    [설명] 시스템의 날짜를 구한다.

    24.1.146. getdefaultpalette()

    [형식]
    #include <graphics.h>
    void palettetype *far getdefaultpalette(void);

    [매개변수]
    없음.

    [되돌림값]
    드라이버로 지정된 기본 팔레트의 포인터를 돌려준다.

    [설명] 팔레트 정의 구조를 알아낸다.

    24.1.147. getdfree()

    [형식]
    #include <stdio.h>
    void getdfree(drive, dtable);

    [매개변수]
    unsigned char drive : 드라이브 번호.
    struct dfree *dtable : 결과 저장하는 구조체 포인터.

    [되돌림값]
    없음. 오류가 발생하면 -1을 지정함.

    [설명] 디스크에서 사용하지 않은 영역의 크기를 검사해 얻는다.

    24.1.148. getdisk()

    [형식]
    #include <dir.h>
    int getdisk();

    [매개변수]
    없음.

    [되돌림값]
    현재 드라이브 번호.

    [설명] 현재 디스크 드라이브 번호를 얻는다.

    24.1.149. getdrivername()

    [형식]
    #include <graphics.h>
    char *far getdrivername();

    [매개변수]
    없음.

    [되돌림값]
    드라이버 이름을 포함하는 문자열 포인터.

    [설명] 현재 그래픽스 드라이버의 이름을 포함한 문자열 포인터를 얻는다.

    24.1.150. getdta()

    [형식]
    #include <dos.h>
    char far *getdta();

    [매개변수]
    없음.

    [되돌림값]
    현재 DTA를 위한 파 포인터.

    [설명] 현재 DTA(disk transfer address)를 얻는다.

    24.1.151. getenv()

    [형식]
    #include <stdlib.h>
    char *getenv(var);

    [매개변수]
    char *var : 환경 변수 이름.

    [되돌림값]
    환경 변수 이름을 돌려준다. 실패하면 빈 문자열을 돌려준다.

    [설명] var 변수 이름에 해당하는 환경 변수를 얻는다.

    24.1.152. getfat()

    [형식]
    #include <dos.h>
    void getfat(drive, dtable);

    [매개변수]
    unsigned char drive : 조사할 드라이브 번호.
    struct fatinfo *dtable : 결과를 저장할 구조체 포인터.

    [되돌림값]
    없음.

    [설명] 지정한 드라이브의 FAT 정보를 얻는다.

    24.1.153. getfatd()

    [형식]
    #include <dos.h>
    void getfatd(dtable);

    [매개변수]
    struct fatinfo *dtable : 결과를 저장할 구조체 포인터.

    [되돌림값]
    없음.

    [설명] 현재 드라이브의 FAT 정보를 얻는다.

    24.1.154. getfillpattern()

    [형식]
    #include <graphics.h>
    void far getfillpattern(*upattern);

    [매개변수]
    char far *upatterm : 사용자 정의 필 패턴.

    [되돌림값] 없음.

    [설명] setfillpattern으로 정의된 사용자 fill 패턴을 upattern으로 지정된 8 바이트 영역으로 복사한다.

    24.1.155. getfillsettings()

    [형식]
    #include <graphics.h>
    void far getfillsettings(fillinfo);

    [매개변수]
    struct fillsettingstype far *fillinfo : 결과를 저장할 구조체 포인터.

    [되돌림값]
    없음.

    [설명] 현재 정의된 fill 패턴과 색에 관한 정보를 얻는다.

    24.1.156. getftime()

    [형식]
    #include <io.h>
    int getftime(handle,ftimep);

    [매개변수]
    int handle : 파일 핸들러 번호.
    struct ftime *ftimep : 결과를 저장할 구조체 포인터.

    [되돌림값]
    성공하면 0을, 오류가 나면 -1을 돌려준다.

    [설명] 파일의 날짜와 시간을 얻는다.

    24.1.157. getgraphmode()

    [형식]
    #include <graphics.h>
    int far getgraphmode();

    [매개변수]
    없음.

    [되돌림값]
    그래픽스 모드를 돌려준다.

    [설명] initgraph나 setgraphmode에 의해 설정된 현재 그래픽 모드에 관한 정보를 얻는다.

    24.1.158. getimage()

    [형식]
    #include <graphics.h>
    void far getimage(left, top, right, bottom, bitmap);

    [매개변수]
    int left : 영역의 왼 쪽.
    int top : 영역의 위 쪽.
    int right : 영역의 오른 쪽.
    int bottom : 영역의 아래 쪽.
    void far *bitmap : 이미지를 저장할 영역의 포인터.

    [되돌림값]
    없음.

    [설명] 화면의 비트 이미지 중 일정 부분을 잡아서 메모리에 저장한다.

    24.1.159. getlinesettings()

    [형식]
    #include <graphics.h>
    void far getlinesettings(lineinfo);

    [매개변수]
    struct linesettingstype far *lineinfo : 결과를 저장할 구조체 포인터

    [되돌림값]
    없음.

    [설명] 현재 라인의 스타일, 패턴, 두께에 관한 정보로 lineinfo에 의해 지정된 포인터 지점의 값을 얻는다.

    24.1.160. getmaxcolor()

    [형식]
    #include <graphics.h>
    int far getmaxcolor(void);

    [매개변수]
    없음.

    [되돌림값]
    사용 가능한 컬러의 최대값.

    [설명] 현재 사용할 수 있는 가장 높은 컬러 번호를 구한다.

    24.1.161. getmaxmode()

    [형식]
    #include <graphics.h>
    int far getmaxmode(void)

    [매개변수]
    없음.

    [되돌림값]
    현재 사용 가능한 최대 모드 번호.

    [설명]
    현재의 그래픽스 드라이버로 사용할 수 있는 최대의 모드 번호를 구한다.

    24.1.162. getmaxx()

    [형식]
    #include <graphics.h>
    int far getmaxx(void);

    [매개변수]
    없음.

    [되돌림값]
    x 좌표의 최대값.

    [설명] 현재의 그래픽 모드에서의 최대 x 좌표값을 구한다.

    24.1.163. getmaxy()

    [형식]
    #include <graphics.h>
    int far getmaxy(void);

    [매개변수]
    없음.

    [되돌림값]
    y 좌표의 최대값.

    [설명] 현재의 그래픽 모드에서의 최대 y 좌표값을 구한다.

    24.1.164. getmodename()

    [형식]
    #include <graphics.h>
    char *far getmodename(mode_number);

    [매개변수]
    int mode_number : 모드 번호.

    [되돌림값]
    모드 이름을 포함하는 문자열의 포인터.

    [설명] 그래픽스 모드의 이름을 포함하는 문자열 포인터를 구한다.

    24.1.165. getmoderange()

    [형식]
    #include <graphics.h>
    void far getmoderange(graphdriver, *lomode, *himode);

    [매개변수]
    int graphdriver : 그래픽스 드라이버 번호.
    int far *lomode : 모드의 최저값을 나타내는 포인터.
    int far *himode : 모드의 최대값을 나타내는 포인터.

    [되돌림값]
    없음.

    [설명] 주어진 드라이버에 대하여 유효한 그래픽 모드의 범위를 구한다. 가장 적은 값은 *lomode, 가장 큰 모드값은 *himode로 얻는다.

    24.1.166. getpalette()

    [형식]
    #include <graphics.h>
    void far getpalette(palette);

    [매개변수]
    struct palettetype far *palette : 결과를 저장하는 구조체 포인터.

    [되돌림값]
    없음.

    [설명] 현재 사용하는 팔레트에 관한 정보를 얻는다.

    24.1.167. getpalettesize()

    [형식]
    #include <graphics.h>
    void far getpalettesize(void);

    [매개변수]
    없음.

    [되돌림값]
    팔레트의 수.

    [설명] 팔레트의 크기 즉 사용 가능한 수를 구한다.

    24.1.168. getpass()

    [형식]
    #include <conio.h>
    char *getpass(*prompt);

    [매개변수]
    const char *prompt : 프롬프트 메시지를 표시하는 문자열.

    [되돌림값]
    문자열의 포인터.

    [설명] 패스워드를 읽고 메시지를 화면에 표시한다.

    24.1.169. getpixel()

    [형식]
    #include <graphics.h>
    unsigned far getpixel(x, y);

    [매개변수]
    int x : 픽셀의 x 좌표.
    int y : 픽셀의 y 좌표.

    [되돌림값]
    좌표값의 픽셀 컬러.

    [설명] x, y 좌표에 위치한 점의 컬러를 얻는다.

    24.1.170. getpsp()

    [형식]
    #include <dos.h>
    unsigned getpsp(void);

    [매개변수]
    없음.

    [되돌림값]
    PSP의 세그먼트 어드레스.

    [설명] PSP(program segment prefix)를 구한다.

    24.1.171. gets()

    [형식]
    #include <stdio.h>
    char *gets(*string);

    [매개변수]
    char *string : 입력한 문자열을 저장하는 영역의 포인터.

    [되돌림값]
    성공하면 문자열 s를, 실패하면 NULL을 돌려준다.

    [설명] stdin(키보드)로부터 문자열을 입력받아 저장한다.

    24.1.172. gettext()

    [형식]
    #include <conio.h>
    int gettext(left, top, right, bottom, *destin);

    [매개변수]
    int left, top, right, bottom : 영역의 왼 쪽, 위 쪽, 오른 쪽, 아래 쪽.
    void *destin : 메모리 영역.

    [되돌림값]
    성공하면 1을 실패하면 0을 돌려준다.

    [설명] 텍스트 모드 화면에서 left, top, right, bottom 지정된 직사각형 영역을 *destin의 메모리 영역에 저장한다. 즉 화면의 텍스트를 메모리로 복사한다.

    24.1.173. gettextinfo()

    [형식]
    #include <conio.h>
    void gettextinfo(*r);

    [매개변수]
    struct text_info *r : 결과를 저장하는 구조체 포인터.

    [되돌림값]
    없음. 결과는 r이 가리키는 구조체에 복귀시킨다.

    [설명] 텍스트 모드 정보를 얻는다.

    24.1.174. gettextsettings()

    [형식]
    #include <graphics.h>
    void far gettextsettings(*texttypeinfo);

    [매개변수]
    struct textsettingstype far *texttypeinfo : 결과를 저장할 구조체 포인터.

    [되돌림값]
    없음.

    [설명] 텍스트 폰트, 크기, 방향 등의 정보를 구조체에 저장한다.

    24.1.175. gettime()

    [형식]
    #include <dos.h>
    void gettime(timep);

    [매개변수]
    struct time *timep : 결과를 저장하는 구조체 포인터.

    [되돌림값]
    없음.

    [설명] 시스템의 시간을 구한다.

    24.1.176. getvect()

    [형식]
    #include <dos.h>
    void interrupt(*getvect(intr_num)) ();

    [매개변수]
    int intr_num : 인터럽트 번호.

    [되돌림값]
    인터럽트 벡터를 저장하는 4바이트 값.

    [설명] 인터럽트 벡터를 구한다.

    24.1.177. getverify()

    [형식]
    #include <dos.h>
    int getverify(void);

    [매개변수]
    없음.

    [되돌림값]
    verify flag 상태.

    [설명] 도스의 verify flag 상태를 구한다. 상태가 off이면 0을, on이면 1을 돌려준다.

    24.1.178. getviewsettings()

    [형식]
    #include <graphics.h>
    void far getviewsettings(*viewport);

    [매개변수]
    struct viewporttype far *viewport : 결과를 저장하는 구조체 포인터.

    [되돌림값]
    없음.

    [설명] viewport로 지정된 곳의 뷰포트 정보를 얻는다.

    24.1.179. getw()

    [형식]
    #include <stdio.h>
    int getw(*fp);

    [매개변수]
    FILE *fp : 파일 포인터.

    [되돌림값]
    성공하면 정수를, 오류가 생기면 EOF를 돌려준다.

    [설명] 지정된 입력 스트림으로부터 다음 정수 값을 구한다.

    24.1.180. getx()

    [형식]
    #include <graphics.h>
    int far getx(void);

    [매개변수]
    없음.

    [되돌림값]
    현재 위치의 x 좌표.

    [설명] 현재 위치한 곳의 x 좌표값을 구한다.

    24.1.181. gety()

    [형식]
    #include <graphics.h>
    int far gety(void);

    [매개변수]
    없음.

    [되돌림값]
    현재 위치의 y 좌표.

    [설명] 현재 위치한 곳의 y 좌표값을 구한다.

    24.1.182. gmtime()

    [형식]
    #include <time.h>
    struct tm *gmtime(*timer);

    [매개변수]
    const time_t *timer : 그리니치 표준시로 변환하는 시각.

    [되돌림값]
    구조체 포인터.

    [설명] 날짜와 시간을 그리니치 표준시로 변환해 구조체에 저장한다.

    24.1.183. gotoxy()

    [형식]
    #include <conio.h>
    void gotoxy(x, y);

    [매개변수]
    int x : 커서의 x 좌표.
    int y : 커서의 y 좌표.

    [되돌림값]
    없음.

    [설명] 텍스트 윈도에서 커서 위치를 (x, y)의 위치로 이동시킨다.

    24.1.184. graphdefaults()

    [형식]
    #include <graphics.h>
    void far graphdefaults();

    [매개변수]
    없음.

    [되돌림값]
    없음.

    [설명] 모든 그래픽 환경 설정을 초기값(default)으로 다시 설정한다.

    24.1.185. grapherrormsg()

    [형식]
    #include <graphics.h>
    char *far grapherrormsg(errorcode);

    [매개변수]
    int errorcode : 그래픽 함수의 오류 코드.

    [되돌림값]
    오류 메시지 문자열의 포인터.

    [설명] 오류 메시지를 나타내는 문자열을 돌려준다.

    24.1.186. _graphfreemem()

    [형식]
    #include <graphics.h>
    void far _graphfreemem(*ptr, size);

    [매개변수]
    void far *ptr : 메모리 영역의 포인터.
    unsigned size : 메모리 영역의 크기를 나타내는 바이트 값.

    [되돌림값]
    없음.

    [설명] 사용자가 그래픽스 라이브러리로 사용한 그패픽 메모리 영역을 해제한다.

    24.1.187. _graphgetmem()

    [형식]
    #include <graphics.h>
    void far *far _graphgetmem(size);

    [매개변수]
    unsigned size : 바이트로 표시되는 할당 메모리 크기.

    [되돌림값]
    없음.

    [설명] 그래픽스 라이브러리로 사용할 메모리를 바이트 크기로 할당한다.

    24.1.188. graphresult()

    [형식]
    #include <graphics.h>
    int far graphresult();

    [매개변수]
    없음.

    [되돌림값]
    현재 그래픽 함수의 오류 번호.

    [설명] 맨 마지막에 사용한 그래픽 연산에 관한 오류 코드를 얻는다.

    24.1.189. harderr()

    [형식]
    #include <dos.h>
    void harderr(handler);

    [매개변수]
    int (*handler) () : 설치할 핸들러 함수.

    [되돌림값]
    없음.

    [설명] 하드웨어 오류 핸들러를 설치한다.

    24.1.190. hardresume()

    [형식]
    #include <dos.h>
    void hardresume(axret);

    [매개변수]
    int axret : 결과 코드.

    [되돌림값]
    없음.

    [설명] 하드웨어 오류 핸들러를 도스로 돌려준다. 결과 코드는 0=ignore, 1=retry, 2=abort 이다.

    24.1.191. hardretn()

    [형식]
    #include <dos.h>
    void hardretn(retn);

    [매개변수]
    int retn : 결과 코드.

    [되돌림값]
    없음.

    [설명] 하드웨어 오류 핸들러를 프로그램으로 돌려준다. 결과 코드는 0=ignore, 1=retry, 2=abort 이다.

    24.1.192. highvideo()

    [형식]
    #include <conio.h>
    void highvideo();

    [매개변수]
    없음.

    [되돌림값]
    없음.

    [설명] 현재 선택한 전경색을 고휘도 문자로 선택한다.

    24.1.193. hypot()

    [형식]
    #include <math.h>
    double hypot(x, y);

    [매개변수]
    double x, y : 직각 삼각형의 각 변의 길이.

    [되돌림값]
    성공하면 z를 돌려주고, 실패하면 HUGE_VAL을 돌려준다.

    [설명] 직각 삼각형의 빗변을 구한다.

    24.1.194. imagesize()

    [형식]
    #include <graphics.h>
    unsigned far imagesize(left, top, right, bottom);

    [매개변수]
    int left : 왼 쪽.
    int top : 위 쪽.
    int right : 오른 쪽 .
    int bottom : 아래 쪽.

    [되돌림값]
    필요한 메모리의 크기를 돌려준다.

    [설명] 비트맵 이미지를 저장하는데 필요한 바이트의 크기를 얻는다.

    24.1.195.initgraph()

    [형식]
    #include <graphics.h>
    void far initgraph(graphdriver, graphmode, pathtodriver);

    [매개변수]
    int far *graphdriver : 그래픽스 드라이버 종류.
    int far *graphmode : 그래픽스 모드 번호.
    char far *pathtodriver : 드라이버의 경로.

    [되돌림값]
    없음.

    [설명] 그래픽 시스템으로 초기화한다. 다시 말해 텍스트 상태인 컴퓨터 상태를 그래픽 상태로 변경한다.

    24.1.196. inport()

    [형식]
    #include <dos.h>
    void inport(portid);

    [매개변수]
    int portid : 포트 번호.

    [되돌림값]
    입력한 값.

    [설명] portid로 지정한 입출력 포트에서 1 단어를 입력한다.

    24.1.197. inportb()

    [형식]
    #include <dos.h>
    unsigned char inportb(portid);

    [매개변수]
    int portid : 포트 번호.

    [되돌림값]
    입력한 값.

    [설명] portid로 지정한 입출력 포트에서 1바이트를 입력한다.

    24.1.198. insline()

    [형식]
    #include <conio.h>
    void insline();

    [매개변수]
    없음.

    [되돌림값]
    없음.

    [설명] 텍스트 윈도에 빈 줄을 삽입한다.

    24.1.199. installuserdriver()

    [형식]
    #include <graphics.h>
    int far installuserdriver(name, detect);

    [매개변수]
    char far *name : 드라이버의 파일 이름.
    int far (*detect) () : 하드웨어 자동 검출 함수의 포인터.

    [되돌림값]
    새롭게 설치되는 드라이버 번호.

    [설명] BGI 디바이스 드라이버 테이블에 디바이스 드라이버를 추가하여 설치한다.

    24.1.200. installuserfont()

    [형식]
    #include <graphics.h>
    int far installuserfont(name);

    [매개변수]
    char far *name : 스트로크 폰트 파일 이름.

    [되돌림값]
    폰트 ID 번호.

    [설명] 폰트 파일(*.chr)을 불러온다.

    24.1.201. int86()

    [형식]
    #include <dos.h>
    int int86(intno, inregs, outregs);

    [매개변수]
    int intno : 인터럽트 번호.
    union REGS *inregs : 인도되는 레지스터의 값을 저장하는 영역.
    union REGS *outregs : 결과로 복귀될 값을 저장하는 영역.

    [되돌림값]
    AX 레지스터 값.

    [설명] 8086 소프트웨어 인터럽트를 발생시킨다.

    24.1.202. int86x()

    [형식]
    #include <dos.h>
    int int86x(intno, inregs, outregs, segregs);

    [매개변수]
    int intno : 인터럽트 번호.
    union REGS *inregs : 인도되는 레지스터의 값을 저장하는 영역.
    union REGS *outregs : 결과로 복귀될 값을 저장하는 영역.
    struct SREGS *segregs : 인도되는 세그먼트 레지스터 값.

    [되돌림값]
    AX 레지스터 값.

    [설명] 8086 소프트웨어 인터럽트 인터페이스를 발생시킨다.

    24.1.203. intdos()

    [형식]
    #include <dos.h>
    int intdos(inregs, outregs);

    [매개변수]
    union REGS *inregs : 인도되는 레지스터의 값을 저장하는 영역.
    union REGS *outregs : 결과로 복귀될 값을 저장하는 영역.

    [되돌림값]
    AX 레지스터 값.

    [설명] DOS 인터럽트를 발생시킨다.

    24.1.204. intdosx()

    [형식]
    #include <dos.h>
    int intdosx(inregs, outregs, segregs);

    [매개변수]
    union REGS *inregs : 인도되는 레지스터의 값을 저장하는 영역.
    union REGS *outregs : 결과로 복귀될 값을 저장하는 영역.
    struct SREGS *segregs : 인도되는 세그먼트 레지스터 값.

    [되돌림값]
    AX 레지스터 값.

    [설명] DOS 인터럽트 인터페이스를 발생시킨다.

    24.1.205. intr()

    [형식]
    #include <dos.h>
    void intr(intno, preg);

    [매개변수]
    int intno : 인터럽트 번호.
    struct REGPACK *preg : 레지스터 값을 저장하는 영역.

    [되돌림값]
    없음.

    [설명] 8086 소트트웨어 인터페이스를 발생시킨다.

    24.1.206. ioctl()

    [형식]
    #include <dos.h>
    int ioctl(handle, func [, argdx, argcx]);

    [매개변수]
    int handle : 파일 핸들러 번호.
    int func : al 레지스터에 지정되는 값.
    void *argdx : ds 레지스터에 지정되는 값.
    int argcx : cx 레지스터에 지정되는 값.

    [되돌림값]
    디바이스 정보.

    [설명] IO 디바이스를 직접 제어한다.

    24.1.207. isalnum()

    [형식]
    #include <ctype.h>
    int isalnum(c)

    [매개변수]
    int c : 조사할 문자.

    [되돌림값]
    지정된 문자가 영문자나 숫자일 경우 0 이외의 값을 돌려준다.

    [설명] c가 영문자 또는 숫자인가를 판별한다.

    24.1.208. isalpha()

    [형식]
    #include <ctype.h>
    int isalpha(c)

    [매개변수]
    int c : 조사할 문자.

    [되돌림값]
    지정된 문자가 영문자일 경우 0 이외의 값을 돌려준다.

    [설명] c가 영문자(A-Z, a-z)인가를 판별한다.

    24.1.209. isascii()

    [형식]
    #include <ctype.h>
    int isascii(c)

    [매개변수]
    int c : 조사할 문자.

    [되돌림값]
    지정된 c의 아스키 범위가 0~127이면 0 이외의 값을 돌려준다.

    [설명] c가 ASCII문자(0~127)인가를 판별한다.

    24.1.210. isatty()

    [형식]
    #include <io.h>
    int isatty(handle);

    [매개변수]
    int handle : 파일 핸들러 번호.

    [되돌림값]
    캐릭터 디바이스라면 0 이외의 정수를, 그렇지 않으면 0을 돌려준다.

    [설명] 주어진 핸들러 파일의 디바이스 형태를 판별한다.

    24.1.211. iscntrl()

    [형식]
    #include <ctype.h>
    int iscntrl(c);

    [매개변수]
    int c : 조사할 문자.

    [되돌림값]
    컨트롤문자면 0 이외의 값을 돌려준다.

    [설명] c가 컨트롤문자(0x00-0x1f, 0x7f)인가를 판별한다.

    24.1.212. isdigit()

    [형식]
    #include <ctype.h>
    int isdigit(c);

    [매개변수]
    int c : 조사할 문자.

    [되돌림값]
    지정된 문자가 숫자면 0 이외의 값을 돌려준다.

    [설명] 문자 c가 숫자인가를 판별한다.

    24.1.213. isgraph()

    [형식]
    #include <ctype.h>
    int isgraph(c);

    [매개변수]
    int c : 조사할 문자.

    [되돌림값]
    그래픽 문자라면 0 이외의 값을 돌려준다.

    [설명] c가 그래픽문자(프린팅문자)인가를 조사한다.

    24.1.214. islower()

    [형식]
    #include <ctype.h>
    int islower(c)

    [매개변수]
    int c : 조사할 문자.

    [되돌림값]
    지정된 문자가 영문 소문자라면 0 이외의 값을 돌려준다.

    [설명] c가 영어 소문자인가 판별한다.

    24.1.215. isprint()

    [형식]
    #include <ctype.h>
    int isprint(c);

    [매개변수]
    int c : 조사할 문자.

    [되돌림값]
    지정된 문자가 프린팅 문자라면 0 이외의 값을 돌려준다.

    [설명] c가 프린팅문자(=인쇄가능문자, 0x20 - 0x7e)인가를 판별한다.

    24.1.216. ispunct()

    [형식]
    #include <ctype.h>
    int ispunct(c)

    [매개변수]
    int c : 조사할 문자.

    [되돌림값]
    지정된 문자가 구두점 문자라면 0 이외의 값을 돌려준다.

    [설명] c가 구두점문자인가를 판별한다.

    24.1.217. isspace()

    [형식]
    #include <ctype.h>
    int isspace(c)

    [매개변수]
    int c : 조사할 문자.

    [되돌림값]
    지정된 문자가 공백문자라면 0 이외의 값을 돌려준다.

    [설명] c가 공백문자인가를 판별한다.

    24.1.218. isupper()

    [형식]
    #include <ctype.h>
    int isupper(c)

    [매개변수]
    int c : 조사할 문자.

    [되돌림값]
    지정된 문자가 영문 대문자라면 0 이외의 값을 돌려준다.

    [설명] c가 영문 대문자인가 조사한다.

    24.1.219. isxdigit()

    [형식]
    #include <ctype.h>
    int isxdigit(c);

    [매개변수]
    int c : 조사할 문자.

    [되돌림값]
    지정된 문자가 16진수라면 0 이외의 값을 돌려준다.

    [설명] c가 16진수를 표시하는 문자(0~9, A~F, a~f)인가를 조사한다.

    24.1.220. itoa()

    [형식]
    #include <stdlib.h>
    char *itoa(value, *string, radix);

    [매개변수]
    int value : 변환하는 정수 값.
    char *string : 변환 후 결과를 저장하는 문자열.
    int radix : 기수.

    [되돌림값]
    string의 포인터를 돌려준다. 오류가 발생하면 되돌림값이 없다.

    [설명] 정수를 문자열로 변환한다.

    24.1.221. khbit()

    [형식]
    #include <conio.h>
    int khbit();

    [매개변수]
    없음.

    [되돌림값]
    키스트로크가 가능하면 0 이외의 값을 돌려주고, 아니라면 0을 돌려준다.

    [설명] 사용 가능한 키스트로크에 대해 점검한다.

    24.1.222. keep()

    [형식]
    #include <dos.h>
    void keep(status, size);

    [매개변수]
    unsigned char status : 종료 상황.
    unsigned size : 패러그래프의 메모리 크기.

    [되돌림값]
    없음.

    [설명] 프로그램을 상주시키고 종료한다.

    24.1.223. labs()

    [형식]
    #include <math.h>
    #include <stdlib.h>
    long labs(n);

    [매개변수]
    long n : 절대값을 구할 수.

    [되돌림값]
    n의 절대값을 돌려준다.

    [설명] long형 n의 절대값을 구한다.

    24.1.224. ldexp()

    [형식]
    #include <math.h>
    double ldexp(x, exp);

    [매개변수]
    double x : 지수부.
    int exp : 가수부.

    [되돌림값]
    x*2exp 값을 돌려준다.

    [설명] X곱하기 2의 exp제곱값을 계산한다.

    24.1.225. ldiv()

    [형식]
    #include <stdlib.h>
    idiv_t ldiv(number, denom);

    [매개변수]
    long int number : 나누어지는 수.
    long int denom : 나누는 수.

    [되돌림값]
    구조체 멤버로 몫과 나머지를 돌려준다.

    [설명] 장정수형의 나눗셈을 하고 목과 나머지를 계산한다.

    24.1.226. lfind()

    [형식]
    #include <stdlib.h>
    void *lfined(key, base, pnelem, width, fcmp);

    [매개변수]
    const void *key : 검색할 키의 포인터.
    const void *base : 검색할 배열.
    size_t pnelem : 요소의 수.
    size_t width : 배열 내 요소의 바이트 크기.
    int(*fcmp) (const void *elem1, const void *elem2) : 비교 루틴.

    [되돌림값]
    배열에서 검색키와 맞는 첫 번째 엔트리의 주소를 돌려준다.

    [설명] 배열의 선형 검색을 실행한다.

    24.1.227. line()

    [형식]
    #include <graphics.h>
    void far line(x1, y1, x2, y2);

    [매개변수]
    int x1 : 시작점의 x 좌표.
    int y1 : 시작점의 y 좌표.
    int x2 : 마침점의 x 좌표.
    int y2 : 마침점의 y 좌표.

    [되돌림값]
    없음.

    [설명] 두 점 사이에 직선을 그린다.

    24.1.228. linerel()

    [형식]
    #include <graphics.h>
    void far linerel(x, y)

    [매개변수]
    int x : 현재 커서 위치에서 x 좌표까지의 상대 거리.
    int y : 현재 커서 위치에서 y 좌표까지의 상대 거리.

    [되돌림값]
    없음.

    [설명] 현재 커서 위치에서 x축과 y축으로 지정된 만큼 떨어진 점까지 직선을 그린다.

    24.1.229. lineto()

    [형식]
    #include <graphics.h>
    void far lineto(x, y)

    [매개변수]
    int x : 마침점의 x 좌표.
    int y : 마침점의 y 좌표.

    [되돌림값]
    없음.

    [설명] 현재 위치에서 절대 좌표 (x, y)까지 직선을 그린다.

    24.1.230. localtime()

    [형식]
    #include <time.h>
    struct tm *localtime(timer);

    [매개변수]
    const time_t *timer : 포인터.

    [되돌림값]
    구조체 포인터.

    [설명] 날짜와 시간을 구조체로 변환시킨다.

    24.1.231. lock()

    [형식]
    #include <io.h>
    int lock(handle, offset, length);

    [매개변수]
    int handle : 파일 핸들러 번호.
    long offset : 록(lock)되는 영역의 옵셋.
    long length : 록되는 영역의 길이.

    [되돌림값]
    성공하면 0을, 실패하면 -1을 돌려준다.

    [설명] unlock된 핸들러 파일의 offset 위치에서부터 길이 바이트만큼 lock 시킨다.

    24.1.232. log()

    [형식]
    #include <math.h>
    double log(x);

    [매개변수]
    double x : 자연 로그를 구하는 값.

    [되돌림값]
    x의 자연 로그.

    [설명] x의 자연 로그를 구한다.

    24.1.233. log10()

    [형식]
    #include <math.h>
    double log10(x);

    [매개변수]
    double x : 상용 로그를 구하는 값.

    [되돌림값]
    x의 상용 로그.

    [설명] x의 상용 로그를 구한다.

    24.1.234. longjmp()

    [형식]
    #include <setjmp.h>
    void longjmp(jmpb, retval);

    [매개변수]
    jmp_buf jmpb : setjmp로 지정된 버퍼.
    int retval : 복귀되는 값.

    [되돌림값]
    없음.

    [설명] 롱 점프를 실시한다.

    24.1.235. lowvideo()

    [형식]
    #include <conio.h>
    void lowvideo();

    [매개변수]
    없음.

    [되돌림값]
    없음.

    [설명] 현재 사용중인 글씨로 저휘도 문자를 선택한다.

    24.1.236. _lrotl()

    [형식]
    #include <stdlib.h>
    unsigned long _lrotl(val, count);

    [매개변수]
    unsigned long val : 회전하는 값.
    int count : 회전하는 비트 수.

    [되돌림값]
    val을 count만큼 왼쪽으로 회전한 값을 돌려준다.

    [설명] 장정수 값을 왼쪽으로 회전시킨다.

    24.1.237. _lrotr()

    [형식]
    #include <stdlib.h>
    unsigned long _lrotr(val, count);

    [매개변수]
    unsigned long val : 회전하는 값.
    int count : 회전하는 비트 수.

    [되돌림값]
    val을 count만큼 오른쪽으로 회전한 값을 돌려준다.

    [설명] 장정수 값을 오른쪽으로 회전시킨다.

    24.1.238. lsearch()

    [형식]
    #include <stdlib.h>
    void *lsearch(key, base, pnelem, width, fcmp);

    [매개변수]
    void *key : 검색할 키의 포인터.
    void *base : 검색할 배열.
    size_t pnelem : 배열 요소의 수.
    size_t width : 배열 요소의 바이트 수.
    int(*fcmp) (const void *elem1, const void *elem2) : 비교 루틴.

    [되돌림값]
    검색키와 맞는 첫 번째 엔트리의 주소.

    [설명] 배열을 검색한다.

    24.1.239.lseek()

    [형식]
    #include <io.h>
    long lseek(handle, offset, fromwhere);

    [매개변수]
    int handle : 파일 핸들러 번호.
    long offset : 지정하는 판독 위치의 바이트 수.
    int fromwhere : 바이트 수 계산의 기점.

    [되돌림값]
    포인터의 새로운 위치의 옵셋을 돌려준다.

    [설명] 파일 포인터를 이동시킨다.

    24.1.240. ltoa()

    [형식]
    #include <stdlib.h>
    char *ltoa(value, *string, radix);

    [매개변수]
    int value : 변환되는 값.
    char *string : 변환 후 값을 저장할 문자열.
    int radix : 기수.

    [되돌림값]
    성공하면 문자열을 돌려주고 실패하면 없다.

    [설명] 장정수를 문자열로 변환한다.

    24.1.241. main()

    [형식]
    main([argc, argv, env]);

    [매개변수]
    int argc : 명령어 라인 인수 갯수.
    char *argv[] : 각 인수의 포인터 배열.
    char *env[] : 저장하는 환경 변수의 포인터 배열.

    [되돌림값]
    종료 상황을 정수형으로 돌려준다.

    [설명] 프로그램을 시작하는 함수.

    24.1.242. malloc()

    [형식]
    #include <stdlib.h>
    #include <alloc.h>
    void *malloc(size);

    [매개변수]
    size_t size : 메모리의 크기를 나타내는 바이트 수.

    [되돌림값]
    성공하면 메모리 블록의 포인터를, 실패하면 널을 돌려준다.

    [설명] size 크기의 메모리를 메인 메모리로 확보한다.

    24.1.243. _matherr()

    [형식]
    #include <math.h>
    double _matherr(why, fun, arg1, arg2, retval);

    [매개변수]
    _mexcep why : 발생된 오류 형태.
    char *fun : 오류가 발생한 함수의 이름을 포함한 문자열 포인터.
    double *arg1 : *fun이 가리키는 함수에 보내질 인수.
    double *arg2 : *fun이 가리키는 함수에 보내질 인수.
    double retval : matherr에 대한 되돌림값.

    [되돌림값]
    e->retval을 돌려준다.

    [설명] 부동소수점 함수의 오류를 처리한다.

    24.1.244. matherr()

    [형식]
    #include <math.h>
    int matherr(x);

    [매개변수]
    struct exception *x : 오류 상태를 나타내는 구조체 포인터.

    [되돌림값]
    오류가 UNDERFLOW나 TLOSS면 1을, 그렇지 않으면 0을 돌려준다.

    [설명] 수학 함수에서 발생한 오류를 사용자가 수정한다.

    24.1.245. max()

    [형식]
    #include <stdlib.h>
    (type) max(a,b);

    [매개변수]
    a, b : 비교 값.

    [되돌림값]
    2개의 수에서 큰 쪽을 돌려준다.

    [설명] 2개의 수를 비교하여 큰 수를 돌려준다.

    24.1.246. memccpy()

    [형식]
    #include <string.h>
    #include <mem.h>
    void *memccpy(dest, src, c, n);

    [매개변수]
    void *dest : 복사될 곳의 영역.
    const void *src : 복사하는 곳의 영역.
    int c : 지정 문자.
    size_t n : 복사 길이.

    [되돌림값]
    복사되면 c 다음의 포인터를, 아니면 널을 돌려준다.

    [설명] n 바이트의 블록을 src에서 dest로 복사한다.

    24.1.247. memchr()

    [형식]
    #include <string.h>
    #include <mem.h>
    void *memchr(*s, c, n);

    [매개변수]
    const void *s : 검색한 메모리 블록의 선두 주소.
    int c : 검색할 문자.
    size_t n : 검색할 영역의 길이.

    [되돌림값]
    성공하면 c가 나타나는 곳의 포인터를, 아니면 널을 돌려준다.

    [설명] 문자 c가 가리키는 블록의 처음 n 바이트를 검색한다.

    24.1.248. memcmp()

    [형식]
    #include <string.h>
    #include <mem.h>
    void *memcmp(s1, s2, n);

    [매개변수]
    const void *s1 : 비교할 메모리 영역의 선두.
    const void *s2 : 비교할 메모리 영역의 선두.
    size_t n : 메모리 영역의 길이

    [되돌림값]
    s1s2라면 양의 값을 돌려준다.

    [설명] n 바이트의 길이만큼 2개의 블록을 비교한다.

    24.1.249. memcpy()

    [형식]
    #include <string.h>
    #include <mem.h>
    void *memcpy(*dest, *src, n);

    [매개변수]
    void *dest : 복사되는 곳의 영역.
    const void *src : 복사하는 곳의 영역.
    size_t n : 복사하는 길이.

    [되돌림값]
    dest를 돌려준다.

    [설명] n바이트의 블록 내용을 src에서 dest 위치에 복사한다.

    24.1.250. memicmp()

    [형식]
    #include <string.h>
    #include <mem.h>
    void *memicmp(s1, s2, n);

    [매개변수]
    const void *s1 : 비교할 메모리 영역의 선두.
    const void *s2 : 비교할 메모리 영역의 선두.
    size_t n : 메모리 영역의 길이.

    [되돌림값]
    s1s2라면 양의 값을 돌려준다.

    [설명] 대소문자를 구별하지 않고 2개의 문자 배열을 비교한다.

    24.1.251. memmove()

    [형식]
    #include <string.h>
    #include <mem.h>
    void *memmove(dest, src, n);

    [매개변수]
    const void *s1 : 비교할 메모리 영역의 선두.
    const void *s2 : 비교할 메모리 영역의 선두.
    size_t n : 메모리 영역의 길이.

    [되돌림값]
    dest를 돌려준다.

    [설명] n 바이트의 블록을 복사한다. src와 dest가 겹쳐도 복사한다.

    24.1.252. memset()

    [형식]
    #include <string.h>
    #include <mem.h>
    void *memset(s, c, n);

    [매개변수]
    void *s : 메모리 블록의 선두.
    int c : 문자.
    size_t n : 바이트 수.

    [되돌림값]
    s를 돌려준다.

    [설명] c 문자로 메모리 블록의 n 바이트를 지정한다.

    24.1.253. min()

    [형식]
    #include <stdlib.h>
    (type) min(a,b);

    [매개변수]
    a, b : 비교하는 두 수.

    [되돌림값]
    작은 값을 돌려준다.

    [설명] 두 수를 비교하여 작은 쪽 값을 돌려준다.

    24.1.254. mkdir()

    [형식]
    #include <dir.h>
    int mkdir(path);

    [매개변수]
    char *path : 디렉토리 이름.

    [되돌림값]
    성공하면 0을, 실패하면 -1을 돌려준다.

    [설명] 지정된 이름으로 디렉토리를 만든다.

    24.1.255. MK_FP()

    [형식]
    #include <dos.h>
    void far *MK_FP(seg, offset);

    [매개변수]
    unsigned seg : 세그먼트.
    unsigned offset : 옵셋.

    [되돌림값]
    파 포인터를 돌려준다.

    [설명] 파 포인터를 돌려준다.

    24.1.256. mktemp()

    [형식]
    #include <dir.h>
    int *mktemp(template);

    [매개변수]
    char *template : 파일 이름을 지정할 영역.

    [되돌림값]
    template 문자열의 주소.

    [설명] 유일한 파일 이름을 만든다.

    24.1.257. modf()

    [형식]
    #include <math.h>
    double modf(x, ipart);

    [매개변수]
    double x : 원래 값.
    double *ipart : 정수부.

    [되돌림값]
    x의 소수부 값을 돌려준다.

    [설명] 부동소수점 수치를 정수 부분과 소수 부분으로 분리한다.

    24.1.258. movedata()

    [형식]
    #include <dir.h>
    #include <string.h>
    void movedata(srcseg, srcoff, destseg, destoff, n);

    [매개변수]
    unsigned srcseg : 소스의 세그먼트.
    unsigned srcoff : 소스의 옵셋.
    unsigned destseg : 목적지의 세그먼트.
    unsigned destoff : 목적지의 옵셋.
    size_t n : 복사할 바이트 수.

    [되돌림값]
    없음.

    [설명] 소스가 가리키는 곳에서 목적지로 n 바이트를 복사한다.

    24.1.259. moverel()

    [형식]
    #include <graphics.h>
    void far moverel(dx, dy);

    [매개변수]
    int dx : x 좌표의 상대 위치.
    int dy : y 좌표의 상대 위치.

    [되돌림값]
    없음.

    [설명] 현재의 커서 위치를 지정한 위치인 (dx, dy)로 이동시킨다.

    24.1.260. movetext()

    [형식]
    #include <conio.h>
    int movetext(left, top, right, bottom, destleft, desttop);

    [매개변수]
    int left : 영역의 왼쪽.
    int top : 영역의 위쪽.
    int right : 영역의 오른쪽.
    int bottom : 영역의 아래쪽.
    int destleft : 복사될 영역의 왼쪽.
    int desttop : 복사될 영역의 위쪽.

    [되돌림값]
    성공하면 1을, 오류가 발생하면 0을 돌려준다.

    [설명] left, top, right, bottom 으로 정의된 직사각형 안의 텍스트를 새로 정의한 곳에 복사한다.

    24.1.261. moveto()

    [형식]
    #include <graphics.h>
    void far moveto(x, y)

    [매개변수]
    int x : 이동할 x 좌표.
    int y : 이동할 y 좌표.

    [되돌림값]
    없음.

    [설명] 현재 커서 위치를 (x, y)로 이동시킨다.

    24.1.262. movmem()

    [형식]
    #include <mem.h>
    void movmem(*src, *dest, length);

    [매개변수]
    void *src : 소스.
    void *dest : 목적지 버퍼.
    unsigned length : 길이.

    [되돌림값]
    없음.

    [설명] src 버퍼의 length 바이트의 블록 내용을 dest 버퍼로 복사한다.

    24.1.263. normvideo()

    [형식]
    #include <conio.h>
    void normvideo();

    [매개변수]
    없음.

    [되돌림값]
    없음.

    [설명] 문자 표시 속성을 기본값으로 선택한다.

    24.1.264. nosound()

    [형식]
    #include <dos.h>
    void nosound();

    [매개변수]
    없음.

    [되돌림값]
    없음.

    [설명] PC 스피커를 끈다.

    24.1.265. _open()

    [형식]
    #include <fcntl.h>
    #include <io.h>
    int _open(filename, oflags);

    [매개변수]
    const char *filename : 오픈할 파일 이름.
    int oflags : 파일 모드.

    [되돌림값]
    성공하면 파일 핸들러를, 오류가 발생하면 -1을 돌려준다.

    [설명] 입출력을 위해 파일을 오픈한다.

    24.1.266. open()

    [형식]
    #include <fcntl.h>
    #include <sys\stat.h>
    #include <io.h>
    int open(pathname, access, [.mode]);

    [매개변수]
    const char *pathname : 오픈할 파일 이름.
    int access : 액세스 방식.
    unsigned mode : 파일 모드.

    [되돌림값]
    성공하면 파일 핸들러를, 오류가 발생하면 -1을 돌려준다.

    [설명] 파일을 지정한 모드와 속성으로 연다.

    24.1.267. outport()

    [형식]
    #include <dos.h>
    void far outport(portid, value);

    [매개변수]
    int portid : 포트 번호.
    int value : 출력하는 값.

    [되돌림값]
    없음.

    [설명] 입출력 포트로 한 낱말(워드)를 출력한다.

    24.1.268. outportb()

    [형식]
    #include <dos.h>
    void far outportb(portid, value);

    [매개변수]
    int portid : 포트 번호.
    unsigned char value : 출력하는 값.

    [되돌림값]
    없음.

    [설명] 입출력 포트로 1 바이트를 출력한다.

    24.1.269. outtext()

    [형식]
    #include <graphics.h>
    void far outtext(*textstring);

    [매개변수]
    char far *textstring : 문자열의 포인터.

    [되돌림값]
    없음.

    [설명] 현재 커서 위치에 문자열을 출력한다.

    24.1.270. outtextxy()

    [형식]
    #include <graphics.h>
    void far outtextxy(x, y, *textstring);

    [매개변수]
    int x : x 좌표.
    int y : y 좌표.
    char far *textstring : 문자열 포인터.

    [되돌림값]
    없음.

    [설명] (x, y) 위치에 문자열을 출력한다.

    24.1.271. parsfnm()

    [형식]
    #include <dos.h>
    int *parsfnm(cmdline, fcb, option);

    [매개변수]
    const char *cmdline : DS:SI로 인도되는 파일 이름.
    struct fcb *fcb : ES:DI로 인도되는 FCB.
    int option : AL로 인도되는 옵션.

    [되돌림값]
    성공하면 파일 이름 끝의 다음 바이트 포인터를, 오류가 발생하면 널을 돌려준다.

    [설명] 파일 이름을 분석한다.

    24.1.272. peek()

    [형식]
    #include <dos.h>
    int peek(segment, offset);

    [매개변수]
    unsigned segment : 세그먼트 값.
    unsigned offset : 옵셋 값.

    [되돌림값]
    segment:offset에 저장된 단어를 돌려준다.

    [설명] segment:offset이 가리키는 메모리에 있는 단어를 읽어들인다.

    24.1.273. peekb()

    [형식]
    #include <dos.h>
    int peekb(segment, offset);

    [매개변수]
    unsigned segment : 세그먼트 값.
    unsigned offset : 옵셋 값.

    [되돌림값]
    segment:offset에 저장된 자료를 돌려준다.

    [설명] segment:offset이 가리키는 메모리에 있는 바이트를 읽어들인다.

    24.1.274. perror()

    [형식]
    #include <stdio.h>
    void perror(s)

    [매개변수]
    const char *s : 표시할 문자열.

    [되돌림값]
    없음.

    [설명] 시스템의 오류 메시지를 표시한다.

    24.1.275. pieslice()

    [형식]
    #include <graphics.h>
    void far pieslice(x, y, stangle, endangle, radius);

    [매개변수]
    int x : 부채꼴 중심의 x 좌표.
    int y : 부채꼴 중심의 y 좌표.
    int stangle : 부채꼴의 개시각.
    int endangle : 부채꼴의 종료각.
    int radius : 부채꼴의 반지름.

    [되돌림값]
    없음.

    [설명] 중점 (x, y)에서 stangle에서 endangle까지 반경 radius로 부채꼴(pie)을 그린다. 내부는 컬러와 패턴으로 칠한다.

    24.1.276. poke()

    [형식]
    #include <dos.h>
    void poke(segment, offset, value);

    [매개변수]
    unsigned segment : 세그먼트 값.
    unsigned offset : 옵셋 값.
    int value : 저장할 값.

    [되돌림값]
    없음.

    [설명] segment:offset으로 지정한 메모리에 value를 저장한다.

    24.1.277. pokeb()

    [형식]
    #include <dos.h>
    void pokeb(segment, offset, value);

    [매개변수]
    unsigned segment : 세그먼트 값.
    unsigned offset : 옵셋 값.
    int value : 저장할 값.

    [되돌림값]
    없음.

    [설명] segment:offset으로 지정한 메모리에 value(바이트)를 저장한다.

    24.1.278. poly()

    [형식]
    #include <math.h>
    double poly(x, degree, coeffs);

    [매개변수]
    double x : 변수 x의 값.
    int degree : 계산하는 식의 차원.
    double coeffs[] : 계수의 배열.

    [되돌림값]
    x로 계산된 다항식의 값을 돌려준다.

    [설명] 인수로부터 다항식을 구한다.

    24.1.279. pow()

    [형식]
    #include <math.h>
    double pow(x, y);

    [매개변수]
    double x : 계산하는 값.
    double y : 계산하는 값.

    [되돌림값]
    x의 y 제곱값을 돌려준다.
    [설명] x의 y 제곱값을 계산한다.

    24.1.280. pow10()

    [형식]
    #include <math.h>
    double pow10(p);

    [매개변수]
    int p : 계산할 제곱.

    [되돌림값]
    10의 p 제곱을 돌려준다.

    [설명] 10의 p 제곱을 계산한다.

    24.1.281. printf()

    [형식]
    #include <stdio.h>
    printf(format ...);

    [매개변수]
    const char *format : 정해진 포맷.

    [되돌림값]
    성공하면 출력된 바이트 수를 돌려주며, 오류가 발생하면 EOF를 돌려준다.

    [설명] stdout에 정해진 포맷에 의해 출력한다.

    24.1.282. putc()

    [형식]
    #include <stdio.h>
    int putc(ch, fp);

    [매개변수]
    int ch : 출력할 문자.
    FILE *fp : 출력할 파일.

    [되돌림값]
    성공하면 문자 ch를, 오류가 발생하면 EOF를 돌려준다.

    [설명] 스트림에 1 문자를 출력한다.

    24.1.283. putch()

    [형식]
    #include <conio.h>
    int putch(int ch);

    [매개변수]
    int ch : 출력할 문자.

    [되돌림값]
    성공하면 문자 ch를, 오류가 발생하면 EOF를 돌려준다.

    [설명] 단일 문자 ch를 출력한다.

    24.1.284. putchar()

    [형식]
    #include <stdio.h>
    int putchar(ch);

    [매개변수]
    int ch : 출력할 문자.

    [되돌림값]
    성공하면 문자 c를, 오류가 발생하면 EOF를 돌려준다.

    [설명] stout에 1 문자를 출력한다.

    24.1.285. putenv()

    [형식]
    #include <stdlib.h>
    char putenv(name);

    [매개변수]
    const char *name : 환경 변수 문자열.

    [되돌림값]
    성공하면 0을, 오류가 발생하면 -1을 돌려준다.

    [설명] 환경 변수 문자열을 추가한다.

    24.1.286. putimage()

    [형식]
    #include <graphics.h>
    void far putimage(left, top, *bitmap, option);

    [매개변수]
    int left : 영역의 왼쪽.
    int top : 영역의 위쪽.
    void far *bitmap : 이미지가 저장된 영역의 포인터.
    int option : 화면에 나타나는 모드.

    [되돌림값]
    없음.

    [설명] getimage()로 저장된 비트 이미지를 화면에 표시한다.

    24.1.287. putpixel()

    [형식]
    #include <graphics.h>
    void far putpixel(x, y, pixelcolor);

    [매개변수]
    int x : 픽셀의 x 좌표.
    int y : 픽셀의 y 좌표.
    int pixelcolor : 컬러.

    [되돌림값]
    없음.

    [설명] (x, y) 위치에 지정된 색으로 점을 표시한다.

    24.1.288. puts()

    [형식]
    #include <stdio.h>
    int puts(s);

    [매개변수]
    const char *s : 출력할 문자열.

    [되돌림값]
    성공하면 음수가 아닌 값을, 아니면 EOF를 돌려준다.

    [설명] stdout에 문자열을 출력한다.

    24.1.289. puttext()

    [형식]
    #include <conio.h>
    int puttext(left, top, right, bottom, *source);

    [매개변수]
    int left : 영역의 왼쪽.
    int top : 영역의 위쪽.
    int right : 영역의 오른쪽.
    int bottom : 영역의 아래쪽.
    void *source : 복사할 내용.

    [되돌림값]
    성공하면 0 이외의 값을, 오류가 발생하면 0을 돌려준다.

    [설명] 정의된 직사각형 내부에 source의 내용을 화면에 표시한다.

    24.1.290. putw()

    [형식]
    #include <stdio.h>
    int putw(w, fp);

    [매개변수]
    int w : 출력하는 값.
    FILE *fp : 파일 포인터.

    [되돌림값]
    성공하면 정수 w를, 오류가 발생하면 EOF를 돌려준다.

    [설명] 지정된 스트림에 정수를 출력한다.

    24.1.291. qsort()

    [형식]
    #include <stdlib.h>
    void qsort(base, nelem, width, fcmp);

    [매개변수]
    void *base : 검색하는 배열.
    size_t nelem : 요소의 수.
    size_t width : 배열 요소의 바이트 수.
    int(*fcmp) (const void *, const void *) : 비교 함수.

    [되돌림값]
    없음.

    [설명] 퀵소트 알고리즘을 이용해 정렬한다.

    24.1.292. raise()

    [형식]
    #include <signal.h>
    int raise(sig);

    [매개변수]
    int sig : 시그널.

    [되돌림값]
    성공하면 0을, 아니면 0 이외의 값을 돌려준다.

    [설명] 실행 프로그램에 시그널을 보낸다.

    24.1.293. rand()

    [형식]
    #include <stdlib.h>
    int rand();

    [매개변수]
    없음.

    [되돌림값]
    발생시킨 난수를 돌려준다.

    [설명] 난수를 발생시킨다.

    24.1.294. randbrd()

    [형식]
    #include <dos.h>
    int randbrd(fcb, rcnt);

    [매개변수]
    struct fcb *fcb : 기존의 열려있는 FCB.
    int rcnt : 읽어들이는 레코드 수.

    [되돌림값]
    연산 결과에 따라 0, 1, 2, 3 중의 하나를 돌려준다.

    [설명] 블록을 랜덤으로 읽는다.

    24.1.295. randbwr()

    [형식]
    #include <dos.h>
    int randbwr(fcb, rcnt);

    [매개변수]
    struct fcb *fcb : 기존의 열려있는 FCB.
    int rcnt : 쓰는 레코드 수.

    [되돌림값]
    연산 결과에 따라 0, 1, 2 중의 하나를 돌려준다.

    [설명] 블록을 랜덤으로 쓴다.

    24.1.296. random()

    [형식]
    #include <stdlib.h>
    int random(num);

    [매개변수]
    int num : 난수의 최대 값.

    [되돌림값]
    0부터 num-1 사이의 난수를 돌려준다.

    [설명] 난수를 발생시킨다.

    24.1.297. randomize()

    [형식]
    #include <stdlib.h>
    #include <time.h>
    void randomize();

    [매개변수]
    없음.

    [되돌림값]
    없음.

    [설명] 난수 발생 함수를 초기화한다.

    24.1.298. _read()

    [형식]
    #include <io.h>
    int _read(handle, buf, len);

    [매개변수]
    int handle : 파일 핸들러 번호.
    void *buf : 읽어들인 값을 저장하는 버퍼.
    unsigned len : 읽어들이는 길이.

    [되돌림값]
    성공하면 버퍼의 바이트 수를, 오류가 발생하면 0이나 -1을 돌려준다.

    [설명] 파일에서 지정된 바이트를 읽어 버퍼에 저장한다.

    24.1.299. read()

    [형식]
    #include <io.h>
    int read(handle, buf, len);

    [매개변수]
    int handle : 파일 핸들러 번호.
    void *buf : 읽어들인 값을 저장하는 버퍼.
    unsigned len : 읽어들이는 길이.

    [되돌림값]
    성공하면 버퍼의 바이트 수를, 오류가 발생하면 0이나 -1을 돌려준다.

    [설명] 파일에서 지정된 바이트를 읽어 버퍼에 저장한다.

    24.1.300. realloc()

    [형식]
    #include <stdlib.h>
    #include <alloc.h>
    void *realloc(block, size);

    [매개변수]
    void *block : 이미 확보한 메모리 영역.
    size_t size : 다시 확보할 메모리 영역의 길이.

    [되돌림값]
    다시 확보하는 메모리 블록의 주소를 돌려준다. 실패하면 널을 돌려준다.

    [설명] 메인 메모리를 지정된 길이로 다시 변경 확보한다.

    24.1.301. rectangle()

    [형식]
    #include <graphics.h>
    void far rectangle(left, top, right, bottom);

    [매개변수]
    int left, top, right, bottom : 사각형의 왼쪽, 위쪽, 오른쪽, 아래쪽.

    [되돌림값]
    없음.

    [설명] 지정된 영역으로 직사각형을 그린다.

    24.1.302. registerbgidriver()

    [형식]
    #include <graphics.h>
    int registerbgidriver(driver);

    [매개변수]
    void (*driver) (void) : 디바이스 드라이버의 시작 주소.

    [되돌림값]
    성공하면 드라이버 번호를, 실패하면 음수의 오류 코드를 돌려준다.

    [설명] 그래픽 시스템에 그래픽스 드라이버 코드 안에서 레지스터들을 연결시키거나, 드라이버를 등록한다.

    24.1.303. registerbgifont()

    [형식]
    #include <graphics.h>
    int registerbgifont(*font);

    [매개변수]
    void (*font) (void) : 폰트 정보의 시작 주소.

    [되돌림값]
    성공하면 폰트 번호를, 실패하면 음수의 오류 코드를 돌려준다.

    [설명] 폰트를 링크시키라고 시스템에 알려주어 폰트를 등록한다.

    24.1.304. remove()

    [형식]
    #include <stdio.h>
    remove(filename);

    [매개변수]
    filename : 삭제할 파일 이름.

    [되돌림값]
    성공하면 0을, 실패하면 -1을 돌려준다.

    [설명] 파일을 삭제한다.

    24.1.305. rename()

    [형식]
    #include <stdio.h>
    int rename(oldname, newname);

    [매개변수]
    const char *oldname : 원래의 파일 이름.
    const char *newname : 바꿀 새 파일 이름.

    [되돌림값]
    성공하면 0을, 실패하면 -1을 돌려준다.

    [설명] 파일 이름을 바꾼다.

    24.1.306. restorecrtmode()

    [형식]
    #include <graphics.h>
    void far restorecrtmode();

    [매개변수]
    없음.

    [되돌림값]
    없음.

    [설명] initgraph로 호출하기 전의 화면 모드로 돌려준다.

    24.1.307. rewind()

    [형식]
    #include <stdio.h>
    void rewind(ft);

    [매개변수]
    FILE *fp : 파일 포인터.

    [되돌림값]
    없음.

    [설명] 파일 포인터를 스스팀의 시작점으로 이동시킨다.

    24.1.308. rmdir()

    [형식]
    #include <dir.h>
    int rmdir(path);

    [매개변수]
    const char *path : 경로이름.

    [되돌림값]
    디렉토리를 삭제하면 0을, 오류가 발생하면 -1을 돌려준다.

    [설명] 디렉토리를 삭제한다.

    24.1.309. sbrk()

    [형식]
    #include <alloc.h>
    char *sbrk(incr);

    [매개변수]
    int incr : 증감량.

    [되돌림값]
    성공하면 변경 전의 브레이크 값을, 실패하면 -1을 돌려준다.

    [설명] 브레이크 값을 변경함으로써 데이터 세그먼트로 확보된 영역을 변경한다.

    24.1.310. scanf()

    [형식]
    #include <stdio.h>
    int scanf(format, ...);

    [매개변수]
    const char *format : 지정된 형식.

    [되돌림값]
    성공하면 필드의 수를, 실패하면 -1을 돌려준다.

    [설명] 포맷에 의한 입력을 한다.

    24.1.311. searchpath()

    [형식]
    #include <dir.h>
    char *searchpath(file)

    [매개변수]
    const char *file : 찾을 파일 이름.

    [되돌림값]
    성공하면 파일 이름을 나타내는 문자열 포인터, 아니면 널을 돌려준다.

    [설명] 지정한 파일에 대한 경로명을 찾는다.

    24.1.312. sector()

    [형식]
    #include <graphics.h>
    void far sector(x, y, stangle, endangle, xradius, yradius);

    [매개변수]
    int x : 타원의 부채꼴 중심 x 좌표.
    int y : 타원의 부채꼴 중심 y 좌표.
    int stangle : 타원의 부채꼴 개시각.
    int endangle : 타원의 부채꼴 종료각.
    int xradius : 타원의 x 축 반지름.
    int yradius : 타원의 y 축 반지름.

    [되돌림값]
    없음.

    [설명] 내부가 칠해진 타원의 부채꼴을 그린다.

    24.1.313. segread()

    [형식]
    #include <dos.h>
    void segread(segp);

    [매개변수]
    struct SREGS *segp : 세그먼트 레지스터 구조체의 포인터.

    [되돌림값]
    없음.

    [설명] 세그먼트 레지스터의 값을 읽는다.

    24.1.314. setactivepage()

    [형식]
    #include <graphics.h>
    void far setactivepage(page);

    [매개변수]
    int page : 페이지 번호.

    [되돌림값]
    없음.

    [설명] 그래픽이 출력되는 페이지를 지정한다.

    24.1.315. setallpalette()

    [형식]
    #include <graphics.h>
    void far setallpalette(palette);

    [매개변수]
    struct palettetype far *palette : 변경할 자료의 포인터.

    [되돌림값]

    [설명] 모든 팔레트의 색을 변경한다.

    24.1.316. setaspectratio()

    [형식]
    #include <graphics.h>
    void far setaspectratio(xasp, yasp);

    [매개변수]
    int xasp : x(수평) 방향의 애스펙트 비.
    int yasp : y(수직) 방향의 애스펙트 비.

    [되돌림값]
    없음.

    [설명] 애스팩트 비를 변경한다.

    24.1.317. setbkcolor()

    [형식]
    #include <graphics.h>
    void far setbkcolor(*color);

    [매개변수]
    int color : 바꾸고 싶은 배경색.

    [되돌림값]
    없음.

    [설명] 현재의 배경색을 바꾼다.

    24.1.318. setblock()

    [형식]
    #include <dos.h>
    int setblock(segx, newsize);

    [매개변수]
    unsigned segx : 블록의 세그먼트 주소.
    unsigned newsize : 새로 지정할 크기.

    [되돌림값]
    성공하면 -1을, 오류가 발생하면 사용 가능한 블록 크기를 돌려준다.

    [설명] segx로 지정된 블록의 크기를 바꾼다.

    24.1.319. setbuf()

    [형식]
    #include <stdio.h>
    void setbuf(fp, buf);

    [매개변수]
    FILE *fp : 파일 포인터.
    char *buf : 버퍼.

    [되돌림값]
    없음.

    [설명] 지정한 스트림에 버퍼를 배정한다.

    24.1.320. setcbrk()

    [형식]
    #include <dos.h>
    int setcbrk(cbrkvalue);

    [매개변수]
    int cbrkvalue : 컨트롤 브레이크 값.

    [되돌림값]
    보내진 값을 돌려준다.

    [설명] 컨트롤 브레이크 설정을 지정한다.

    24.1.321. setcolor()

    [형식]
    #include <graphics.h>
    void far setcolor(*color);

    [매개변수]
    int color : 지정할 색.

    [되돌림값]
    없음.

    [설명] 현재의 전경색(드로잉컬러)를 지정한다.

    24.1.322. setdate()

    [형식]
    #include <dos.h>
    void setdate(datep);

    [매개변수]
    struct date *datep : 날짜를 저장한 포인터.

    [되돌림값]
    없음.

    [설명] 도스의 날짜를 지정한다.

    24.1.323. setdisk()

    [형식]
    #include <dir.h>
    int setdisk(drive);

    [매개변수]
    int drive : 드라이브.

    [되돌림값]
    사용 가능한 드라이브의 총수.

    [설명] 현재의 디스크 드라이브를 지정한다.

    24.1.324. setdta()

    [형식]
    #include <dos.h>
    void setdta(dta);

    [매개변수]
    char far *dta : DTA 선두를 나타내는 포인터.

    [되돌림값]
    없음.

    [설명] DTA를 지정한다.

    24.1.325. setfillpattern()

    [형식]
    #include <graphics.h>
    void far setfillpattern(upattern, color);

    [매개변수]
    char far *upattern : 패턴 배열의 포인터.
    int color : 필 컬러.

    [되돌림값]
    없음.

    [설명] 사용자가 정의한 필 패턴과 색을 설정한다.

    24.1.326. setfillstyle()

    [형식]
    #include <graphics.h>
    void far setfillstyle(pattern, color);

    [매개변수]
    int pattern : 필 패턴.
    int color : 필 컬러.

    [되돌림값]
    없음.

    [설명] 필 패턴과 필 색을 설정한다.

    24.1.327. setftime()

    [형식]
    #include <io.h>
    int setftime(handle, ftimep);

    [매개변수]
    int handle : 파일 핸들러 번호.
    struct ftime *ftimep : 타임 구조체.

    [되돌림값]
    성공하면 0을 아니면 -1을 돌려준다.

    [설명] 파일의 날짜와 시간을 설정한다.

    24.1.328. setgraphbufsize()

    [형식]
    #include <graphics.h>
    unsigned far setgraphbufsize(bufsize);

    [매개변수]
    unsigned bufsize : 새로운 버퍼 크기.

    [되돌림값]
    변경 전의 버퍼 크기를 돌려준다.

    [설명] 그래픽 시스템에서 사용하는 버퍼의 크기를 bufsize로 변경한다.

    24.1.329. setgraphmode()

    [형식]
    #include <graphics.h>
    void far setgraphmode(mode);

    [매개변수]
    int mode : 그래픽스 모드.

    [되돌림값]
    부정확한 모드일 경우 -11의 값을 돌려준다.

    [설명] 화면을 지우고 시스템에 그래픽스 모드를 설정한다.

    24.1.330. setjmp()

    [형식]
    #include <setjmp.h>
    void setjmp(jmpb);

    [매개변수]
    jmp_buf jmpb : 복귀 지점을 지정하는 버퍼.

    [되돌림값]
    setjmp가 처음 호출되면 0을 돌려준다.

    [설명] 롱점프의 복귀 지점을 지정한다.

    24.1.331. setlinestyle()

    [형식]
    #include <graphics.h>
    void far setlinestyle(linestyle, upattern, thickness);

    [매개변수]
    int linestyle : 라인 스타일.
    int upattern : 사용자 정의 패턴.
    int thickness : 라인 두께.

    [되돌림값]
    setlinestyle로 보내는 것이 부정확하면 라이 스타일을 변경하지 않고 -11을 돌려준다.

    [설명] 현재 라인의 모양, 패턴, 두께를 설정한다.

    24.1.332. setmem()

    [형식]
    #include <mem.h>
    void setmem(*dest, len, value);

    [매개변수]
    void *dest : 메모리 영역의 선두 포인터.
    unsigned len : 영역의 길이.
    char value : 저장되는 값.

    [되돌림값]
    없음.

    [설명] 특정 메모리 영역에 지정한 값을 저장한다.

    24.1.333. setmode()

    [형식]
    #include <io.h>
    int setmode(handle, amode);

    [매개변수]
    int handle : 파일 핸들러 번호.
    int amode : 설정 모드.

    [되돌림값]
    성공하면 0을, 아니면 -1을 돌려준다.

    [설명] handle 관련 오픈 파일의 모드를 텍스트나 바이너리로 설정한다.

    24.1.334. setpalette()

    [형식]
    #include <graphics.h>
    void far setpalette(colornum, color);

    [매개변수]
    int colornum : 팔레트의 번호.
    int color : 지정할 컬러.

    [되돌림값]
    setpalette에 보내는 것이 부정확하면 -11을 돌려준다.

    [설명] 팔레트의 첫 번째 컬러를 color로 지정한 컬러로 바꾼다.

    24.1.335. setrgbpalette()

    [형식]
    #include <graphics.h>
    void far setrgbpalette(colornum, red, green, blue);

    [매개변수]
    int colornum : 팔레트의 번호.
    int red : 빨간색.
    int green : 초록색.
    int blue : 파란색.

    [되돌림값]
    없음.

    [설명] IBM-8514에서 사용자가 컬러를 지정하는 것을 허용한다.

    24.1.336. settextjustify()

    [형식]
    #include <graphics.h>
    void far settextjustify(horiz, vert);

    [매개변수]
    int horiz : 수평 방향의 위치.
    int vert : 수직 방향의 위치.

    [되돌림값]
    settextjustify에 보내는 것이 부정확하면 -11을 돌려준다.

    [설명] 그래픽 함수에서 텍스트를 출력할 때 위치를 맞출 정보를 제공한다.

    24.1.337. settextstyle()

    [형식]
    #include <graphics.h>
    void far settextstyle(font, direction, charsize);

    [매개변수]
    int font : 폰트 번호.
    int direction : 출력되는 방향.
    int charsize : 문자의 크기.

    [되돌림값]
    없음.

    [설명] 그래픽스 화면에 출력하는 텍스트의 스타일을 설정한다.

    24.1.338. settime()

    [형식]
    #include <dos.h>
    void settime(timep);

    [매개변수]
    struct time *timep : 지정할 시간이 저장된 구조체의 포인터.

    [되돌림값]
    없음.

    [설명] 시스템의 시간을 설정한다.

    24.1.339. setusercharsize()

    [형식]
    #include <graphics.h>
    void far setusercharsize(multx, divx, multy, divy);

    [매개변수]
    int multx : 너비 지정 x1.
    int divx : 너비 지정 x2.
    int multy : 높이 지정 y1.
    int divy : 높이 지정 y2.

    [되돌림값]
    없음.

    [설명] 폰트에 대한 글씨 폭과 높이를 사용자가 지정한다.

    24.1.340. setvbuf()

    [형식]
    #include <stdio.h>
    int setvbuf(fp, buf, type, size);

    [매개변수]
    FILE *fp : 파일 포인터.
    char *buf : 새롭게 할당하는 버퍼 포인터.
    int type : 버퍼의 타입.
    size_t size : 버퍼의 크기.

    [되돌림값]
    성공하면 0을, 아니면 0 이외의 값을 돌려준다.

    [설명] 지정하는 길이의 새로운 버퍼를 파일에 할당해준다.

    24.1.341. setverify()

    [형식]
    #include <dos.h>
    void setvirify(value);

    [매개변수]
    int value : 베리파이 플랙에 지정하는 값.

    [되돌림값]
    없음.

    [설명] DOS에서 베리파이 플랙의 상태를 설정한다.

    24.1.342. setviewport()

    [형식]
    #include <graphics.h>
    void far setviewport(left, top, right, bottom, clip);

    [매개변수]
    int left, top, right, bottom : 뷰포트의 왼쪽, 위쪽, 오른쪽, 아래쪽 좌표.
    int clip : 클리핑 플랙.

    [되돌림값]
    setviewport에 보내는 값이 부정확하면 -11을 돌려준다.

    [설명] 그래픽 출력에 대하여 새로운 viewport를 설정한다.

    24.1.343. setvisualpage()

    [형식]
    #include <graphics.h>
    void far setvisualpage(page);

    [매개변수]
    int page : 페이지 번호.

    [되돌림값]
    없음.

    [설명] 나타내는 그래픽 페이지 번호를 page로 설정한다.

    24.1.344. setwritemode()

    [형식]
    #include <graphics.h>
    void far setwritemode(mode);

    [매개변수]
    int mode : 라인을 그리는 모드.

    [되돌림값]
    없음.

    [설명] 그래픽 화면에서 라인을 그리는 모드를 설정한다.

    24.1.345. signal()

    [형식]
    #include <signal.h>
    void *signal(sig, fname);

    [매개변수]
    int sig : 시그널 번호.
    sigfun fname : 설정할 처리 함수.

    [되돌림값]
    성공하면 이전 핸들러를 위한 포인터를 돌려주고, 실패하면SIG_ERR을 돌려준다.

    [설명] 시그널의 처리 함수를 설정한다.

    24.1.346. sin()

    [형식]
    #include <math.h>
    double sin(x);

    [매개변수]
    double x : 사인 값을 구할 값.

    [되돌림값]
    x의 사인 값.

    [설명]
    사인 값을 구한다.

    24.1.347. sinh()

    [형식]
    #include <math.h>
    double sinh(x);

    [매개변수]
    double x : 하이퍼볼릭 사인 값을 구하려는 값.

    [되돌림값]
    하이퍼볼릭 사인 값.

    [설명] 하이퍼볼릭 사인 값을 구한다.

    24.1.348. sleep()

    [형식]
    #include <dos.h>
    void sleep(seconds);

    [매개변수]
    int seconds : 실행을 정지할 초의 길이.

    [되돌림값]
    없음.

    [설명] 지정한 초 동안 실행을 중시킨다.

    24.1.349. sopen()

    [형식]
    #include <fcntl.h>
    #include <sys\stat.h>
    #include <share.h>
    #include <io.h>
    int sopen(path, access, shflag, mode);

    [매개변수]
    char *path : 오픈하려는 파일 경로.
    int access : 액세스 모드.
    int shflag : 쉐어 모드.
    int mode : 모드.

    [되돌림값]
    성공하면 음수가 아닌 정수값을 돌려주고, 오류가 발생하면 -1을 돌려준다.

    [설명] 파일을 쉐어 모드로 연다.

    24.1.350. sound()

    [형식]
    #include <dos.h>
    void sound(frequency);

    [매개변수]
    unsigned frequency : 설정할 주파수.

    [되돌림값]
    없음.

    [설명] 스피커 비프음의 주파수를 설정한다.

    24.1.351. spawn() 계열

    [형식]
    #include <process.h>
    #include <stdio.h>
    int spawnl(mode, path, arg0, ..., NULL);
    int spawnle(mode, path, arg0, ..., NULL, env);
    int spawnlp(mode, path, arg0, ..., NULL);
    int spawnlpe(mode, path, arg0, ..., NULL, env);

    int spawnv(mode, path, argv[]);
    int spawnve(mode, path, argv[], env);
    int spawnvp(mode, path, argv[]);
    int spawnvpe(mode, path, argv[], env);

    [매개변수]
    int mode : 모 프로세서의 동작 지정 모드.
    char *path : 실행하는 파일 이름.
    char *arg0 : 인수를 나타내는 문자.
    char **env : 환경 변수를 나타내는 포인터.
    char *argv[] : 인수를 나타내는 문자열을 지정하는 포인터.

    [되돌림값]
    성공하면 차일드 프로세스의 종료 상황을, 실패하면 -1을 돌려준다.

    [설명] 차일드 프로세스를 실행한다.

    24.1.352. sprintf()

    [형식]
    #include <stdio.h>
    int sprintf(buffer, format, ...);

    [매개변수]
    char *buffer : 결과를 저장하는 버퍼.
    const char *format : 포맷 형식.
    ... : 기타 인수.

    [되돌림값]
    성공하면 출력한 바이트 수를, 실패하면 EOF를 돌려준다.

    [설명] 문자열을 포맷에 의해 출력한다.

    24.1.353. sqrt()

    [형식]
    #include <math.h>
    double sqrt(x);

    [매개변수]
    double x : 제곱근을 구할 값.

    [되돌림값]
    x의 양의 제곱근을 돌려준다.

    [설명] x의 양의 제곱근을 구한다.

    24.1.354. srand()

    [형식]
    #include <stdlib.h>
    void srand(seed);

    [매개변수]
    unsigned seed : 초기화에 사용하는 값.

    [되돌림값]
    없음.

    [설명] 난수 발생 함수 지정 수치를 초기화한다.

    24.1.355. sscanf()

    [형식]
    #include <stdio.h>
    int sscanf(buffer, format, ...);

    [매개변수]
    const char *buffer : 입력할 문자열이 저장된 버퍼.
    const char *format : 입력 포맷.
    ... : 결과를 저장하는 주소 등.

    [되돌림값]
    성공하면 필드의 수를, 실패하면 EOF를 돌려준다.

    [설명] 문자열을 입력하고 입력한 내용을 포맷에 의한 변환한다.

    24.1.356. stat()

    [형식]
    #include <sys\stat.h>
    int stat(path, statbuf);

    [매개변수]
    char *path : 조사할 파일 이름.
    struct stat *statbuf : 결과를 저장하는 구조체 포인터.

    [되돌림값]
    파일에 관한 정보를 얻으면 0을, 아니면 -1을 돌려준다.

    [설명] 오픈된 파일에 대한 정보를 얻는다.

    24.1.357. _status87()

    [형식]
    #include <float.h>
    unsigned int _status87(void);

    [매개변수]
    없음.

    [되돌림값]
    수치연산 프로세서의 상태를 돌려준다.

    [설명] 수치연산 프로세서의 상태를 검사한다.

    24.1.358. stime()

    [형식]
    #include <time.h>
    int stime(tp);

    [매개변수]
    time_t *tp : 지정한 시간이 저장된 포인터.

    [되돌림값]
    0을 돌려준다.

    [설명] 시스템의 날짜와 시간을 설정한다.

    24.1.359. stpcpy()

    [형식]
    #include <string.h>
    char *stpcpy(dest, *src);

    [매개변수]
    char *dest : 복사된 문자열이 저장될 포인터.
    const char *src : 복사하려는 원본 문자열.

    [되돌림값]
    dest를 돌려준다.

    [설명] src의 문자열을 dest로 복사한다.

    24.1.360. strcat()

    [형식]
    #include <string.h>
    char *strcat(dest, src);

    [매개변수]
    char *dest : 복사된 문자열이 저장될 포인터.
    const char *src : 복사하려는 원본 문자열.

    [되돌림값]
    dest를 돌려준다.

    [설명] src 문자열을 dest 문자열에 추가한다.

    24.1.361. strchr()

    [형식]
    #include <string.h>
    char *strchr(*str, c);

    [매개변수]
    const char *str : 검색 대상 문자열.
    int c : 찾는 문자.

    [되돌림값]
    문자를 찾으면 첫 번째 발견 포인터를, 아니면 널을 돌려준다.

    [설명] 문자열에서 주어진 문자의 위치를 찾는다.

    24.1.362. strcmp()

    [형식]
    #include <string.h>
    int *strcmp(s1, s2);

    [매개변수]
    const char *s1 : 비교하는 문자열.
    const char *s2 : 비교하는 문자열.

    [되돌림값]
    s1s2면 0보다 큰 값을 돌려준다.

    [설명] 두 문자열을 비교한다.

    24.1.363. strcmpi()

    [형식]
    #include <string.h>
    char *strcmpi(s1, s2);

    [매개변수]
    char *s1 : 비교할 문자열.
    char *s2 : 비교할 문자열.

    [되돌림값]
    s1s2면 0보다 큰 값을 돌려준다.

    [설명] 대소문자 구별 없이 두 문자열을 비교한다.

    24.1.364. strcpy()

    [형식]
    #include <string.h>
    char *strcpy(dest, src);

    [매개변수]
    char *dest : 복사된 문자열이 저장될 포인터.
    const char *src : 복사하려는 원본 문자열.

    [되돌림값]
    dest를 돌려준다.

    [설명] src의 문자열을 dest로 복사한다.

    24.1.365. strcspn()

    [형식]
    #include <string.h>
    size_t strcspn(s1, s2);

    [매개변수]
    const char *s1 : 비교 문자열.
    const char *s2 : 비교 문자열.

    [되돌림값]
    s1 중에서 검색하여 s2에 없는 문자를 돌려준다.

    [설명] s1의 문자열에서 str2의 문자열에 없는 글자가 나타날 때까지 비교한다.

    24.1.366. strdup()

    [형식]
    #include <string.h>
    char *strdup(*s);

    [매개변수]
    const char *s : 복사할 문자열

    [되돌림값]
    문자열을 저장하는 포인터를 돌려준다.

    [설명] 문자열을 새 장소에 복사한다.

    24.1.367. _strerror()

    [형식]
    #include <string.h>
    #include <stdio.h>
    char *_strerror(s);

    [매개변수]
    const char *s : 사용자 메시지.

    [되돌림값]
    오류 메시지를 구성하는 포인터를 돌려준다.

    [설명] 오류 메시지를 나타내는 문자열의 포인터를 구한다.

    24.1.368. strerror()

    [형식]
    #include <string.h>
    #include <stdio.h>
    char *strerror(errnum);

    [매개변수]
    int errnum : 오류 메시지 번호.

    [되돌림값]
    오류 메시지를 구성하는 포인터를 돌려준다.

    [설명] 오류 메시지를 나타내는 문자열의 포인터를 구한다.

    24.1.369. stricmp()

    [형식]
    #include <string.h>
    int stricmp(s1, s2);

    [매개변수]
    const char *s1 : 비교할 문자열.
    const char *s2 : 비교할 문자열.

    [되돌림값]
    s1s2면 0보다 큰 값을 돌려준다.

    [설명] 대소문자 구별 없이 두 문자열을 비교한다.

    24.1.370. strlen()

    [형식]
    #include <string.h>
    size_t strlen(s);

    [매개변수]
    const char *s : 길이를 구하려는 문자열.

    [되돌림값]
    문자의 수를 돌려준다. 단 널 문자는 제외한다.

    [설명] s 문자열의 문자 수를 구한다.

    24.1.371. strlwr()

    [형식]
    #include <string.h>
    char *strlwr(s);

    [매개변수]
    char *s : 변환할 문자열.

    [되돌림값]
    s의 포인터.

    [설명] 문자열에서 대문자를 대문자를 소문자로 변환한다.

    24.1.372. strncat()

    [형식]
    #include <string.h>
    char *strncat(dest, src, maxlen);

    [매개변수]
    char *dest : 문자가 추가되는 기존 문자열.
    const char *src : 추가하려는 문자열.
    size_t maxlen : 추가할 문자열의 최대 길이.

    [되돌림값]
    dest를 돌려준다.

    [설명] dest 끝에 src 문자열을 추가한다.

    24.1.373. strncmp()

    [형식]
    #include <string.h>
    char *strncmp(s1, s2, maxlen);

    [매개변수]
    const char *s1 : 비교할 문자열.
    const char *s2 : 비교할 문자열.
    size_t maxlen : 비교할 문자열의 최대 길이.

    [되돌림값]
    s1s2면 0보다 큰 값을 돌려준다.

    [설명] 문자열의 일정 부분을 다른 문자열의 일정 부분과 비교한다.

    24.1.374. strncmpi()

    [형식]
    #include <string.h>
    char *strncmpi(s1, s2, maxlen);

    [매개변수]
    const char *s1 : 비교할 문자열.
    const char *s2 : 비교할 문자열.
    size_t maxlen : 비교할 문자열의 최대 길이.

    [되돌림값]
    s1s2면 0보다 큰 값을 돌려준다.

    [설명] 대소문자 구별 없이 문자열의 일정 부분을 다른 문자열의 일정 부분과 비교한다.

    24.1.375. strncpy()

    [형식]
    #include <string.h>
    char *strncpy(dest, src, maxlen);

    [매개변수]
    char *dest : 복사될 문자열을 저장하는 포인터.
    const char *src : 복사하려는 문자열.
    size_t maxlen : 복사할 문자열의 최대 길이.

    [되돌림값]
    dest를 돌려준다.

    [설명] src를 dest로 정해진 길이만큼 복사한다.

    24.1.376. strnicmp()

    [형식]
    #include <string.h>
    char *strnicmp(s1, s2, maxlen);

    [매개변수]
    const char *s1 : 비교할 문자열.
    const char *s2 : 비교할 문자열.
    size_t maxlen : 비교할 문자열의 최대 길이.

    [되돌림값]
    s1s2면 0보다 큰 값을 돌려준다.

    [설명] 대소문자 구별 없이 문자열의 일정 부분을 다른 문자열의 일정 부분과 비교한다.

    24.1.377. strnset()

    [형식]
    #include <string.h>
    char *strnset(s, c, n);

    [매개변수]
    int *s : 문자열.
    int c : 입력되는 문자.
    size_t n : 입력 갯수.

    [되돌림값]
    s를 돌려준다.

    [설명] 문자 c를 s에 정해진 수만큼 입력한다.

    24.1.378. strpbrk()

    [형식]
    #include <string.h>
    char *strpbrk(s1, s2);

    [매개변수]
    const char *s1 : 검색할 문자열.
    const char *s2 : 검색하는 문자열.

    [되돌림값]
    문자가 처음 발견된 곳의 포인터.

    [설명] s1의 문자열에서 s2의 문자열이 처음 나타나는 곳을 구한다.

    24.1.379. strrchr()

    [형식]
    #include <string.h>
    char *strrchr(s, c);

    [매개변수]
    const char *s : 검색 대상 문자열.
    int c : 검색할 문자.

    [되돌림값]
    c가 마지막으로 발견되는 곳의 포인터를 돌려준다.

    [설명] 문자열에서 문자 c가 마지막으로 나타나는 곳을 구한다.

    24.1.380. strrev()

    [형식]
    #include <string.h>
    char *strrev(s);

    [매개변수]
    char *s : 변환될 문자열.

    [되돌림값]
    변환된 문자열의 포인터를 돌려준다.

    [설명] 문자열을 역순으로 변환한다.

    24.1.381. strset()

    [형식]
    #include <string.h>
    char *strset(s, c);

    [매개변수]
    char *s : 문자열.
    int c : 문자.

    [되돌림값]
    s를 돌려준다.

    [설명] 문자열의 모든 문자를 c로 바꾼다.

    24.1.382. strspn()

    [형식]
    #include <string.h>
    size_t strspn(s1, s2);

    [매개변수]
    const char *s1 : 비교 문자열.
    const char *s2 : 비교 문자열.

    [되돌림값]
    s1 중에서 검색하여 s2가 발견되는 처음 세그먼트의 길이를 돌려준다.

    [설명] s1의 문자열에서 str2의 문자열일 발견되는 첫 번째 세그먼트를 구한다.

    24.1.383. strstr()

    [형식]
    #include <string.h>
    char *strstr(s1, s2);

    [매개변수]
    const char *s1 : 검색되는 문자열.
    const char *s2 : 검색하는 문자열.

    [되돌림값]
    s2의 포인터를 돌려준다.

    [설명] s1에서 s2 문자열이 나타나는지 조사한다.

    24.1.384. strtod()

    [형식]
    #include <stdlib.h>
    double *strtod(s, endptr);

    [매개변수]
    const char *s : 변환할 문자열.
    char **end : 변환을 중지한 문자를 저장하는 영역.

    [되돌림값]
    s의 값을 돌려준다.

    [설명] 문자열을 double 값으로 변환한다.

    24.1.385. strtok()

    [형식]
    #include <string.h>
    char *strtok(s1, s2);

    [매개변수]
    char *s1 : 토큰에 의해 분리되는 문자열.
    const char *s2 : 토큰.

    [되돌림값]
    s1에서 발견된 토큰의 포인터를 돌려준다.

    [설명] s1 문자열에서 s2에 의해 분리되는 문자열을 구한다.

    24.1.386. strtol()

    [형식]
    #include <stdlib.h>
    long *strtol(s, endptr, radix);

    [매개변수]
    const char *s : 변환하는 문자열.
    char **endptr : 변환을 중지한 문자를 저장한 영역.
    int radix : 기수.

    [되돌림값]
    변환된 문자열의 값을 돌려준다. 오류가 발생하면 0을 돌려준다.

    [설명] 문자열을 장정수(long형)로 변환한다.

    24.1.387. strtoul()

    [형식]
    #include <stdlib.h>
    unsigned long *strtoul(s, endptr, radix);

    [매개변수]
    const char *s : 변환하는 문자열.
    char **endptr : 변환을 중지한 문자를 저장한 영역.
    int radix : 기수.

    [되돌림값]
    변환된 값을 돌려준다. 오류가 발생하면 0을 돌려준다.

    [설명] 문자열을 부호 없는 장정수(long형)로 변환한다.

    24.1.388. strupr()

    [형식]
    #include <string.h>
    char *strupr(s);

    [매개변수]
    char *s : 변환할 문자열.

    [되돌림값]
    s를 돌려준다.

    [설명] 문자열의 소문자를 대문자로 변환한다.

    24.1.389. swab()

    [형식]
    #include <stdlib.h>
    void swab(from, to, nbytes);

    [매개변수]
    char *from : 원래의 바이트 배열.
    char *to : 복사될 바이트 배열.
    int nbytes : 문자열의 길이.

    [되돌림값]
    없음.

    [설명] form 문자열을 to 문자열로 nbytes 복사하는데, 짝수 위치와 홀수 위치의 바이트를 교환한다.

    24.1.390. system()

    [형식]
    #include <process.h>
    #include <stdlib.h>
    int system(command);

    [매개변수]
    const char *command : 실행할 DOS 명령.

    [되돌림값]
    성공하면 0을, 오류가 발생하면 -1을 돌려준다.

    [설명] DOS 명령을 실행한다.

    24.1.391. tan()

    [형식]
    #include <math.h>
    double tan(x);

    [매개변수]
    double x : 탄젠트를 구하려는 값.

    [되돌림값]
    x의 탄젠트 값.

    [설명]
    x의 탄젠트 값을 구한다.

    24.1.392. tanh()

    [형식]
    #include <math.h>
    double tanh(x);

    [매개변수]
    double x : 하이퍼볼릭 탄젠트를 구하려는 값.

    [되돌림값]
    x의 하이퍼볼릭 탄젠트 값.

    [설명] x의 하이퍼볼릭 탄젠트 값을 구한다.

    24.1.393. tell()

    [형식]
    #include <io.h>
    long tell(handle);

    [매개변수]
    int handle : 파일 핸들러 번호.

    [되돌림값]
    파일 포인터의 현재 위치.

    [설명] 파일 포인터의 현재 위치를 구한다.

    24.1.394. textattr()

    [형식]
    #include <conio.h>
    void textattr(newattr);

    [매개변수]
    int newattr : 텍스트 속성.

    [되돌림값]
    없음.

    [설명] 텍스트 속성을 설정한다.

    24.1.395. textbackground()

    [형식]
    #include <conio.h>
    void textbackground(newcolor);

    [매개변수]
    int newcolor : 백그라운드 컬러.

    [되돌림값]
    없음.

    [설명] 새로운 텍스트의 배경색을 설정한다.

    24.1.396. textcolor()

    [형식]
    #include <conio.h>
    void textcolor(newcolor);

    [매개변수]
    int newcolor : 텍스트 컬러.

    [되돌림값]
    없음.

    [설명] 텍스트 모드에서 사용할 새 문자 색을 설정한다.

    24.1.397. textheight()

    [형식]
    #include <graphics.h>
    int far textheight(textstring);

    [매개변수]
    char far *textstring : 문자열 포인터.

    [되돌림값]
    문자열의 높이를 돌려준다.

    [설명] 현재 사용중인 font의 높이를 구한다.

    24.1.398. textmode()

    [형식]
    #include <conio.h>
    void textmode(newmode);

    [매개변수]
    int newmode : 새로 지정할 화면 모드.

    [되돌림값]
    없음.

    [설명] 텍스트 모드를 새로 설정한다.

    24.1.399. textwidth()

    [형식]
    #include <graphics.h>
    int far textwidth(textstring);

    [매개변수]
    char far *textstring : 문자열의 포인터.

    [되돌림값]
    문자열의 폭을 돌려준다.

    [설명] 현재 폰트의 픽셀에서 문자열 폭을 구한다.

    24.1.400. time()

    [형식]
    #include <time.h>
    time_t time(timer);

    [매개변수]
    time_t *timer : 시간을 저장하는 변수의 포인터.

    [되돌림값]
    경과 시간을 초로 돌려준다.

    [설명] 1970년 1월 1일 0시 0분 0초부터 경과된 시간을 초 단위로 구한다.

    24.1.401. tmpfile()

    [형식]
    #include <stdio.h>
    FILE *tmpfile(void);

    [매개변수]
    없음.

    [되돌림값]
    임시 파일의 스트림에 대한 포인터를 돌려준다.

    [설명] 바이너리 형태로 임시 파일을 오픈한다.

    24.1.402. tmpnam

    [형식]
    #include <stdio.h>
    char *tmpnam(sptr);

    [매개변수]
    char *sptr : 이름을 저장하는 영역.

    [되돌림값]
    s가 널이 아니면 s를 돌려준다.

    [설명] 임시 파일의 이름으로 사용하는 유일한 파일 이름을 작성한다.

    24.1.403. toascii()

    [형식]
    #include <ctype.h>
    int *toascii(c)

    [매개변수]
    int c : 변환할 값.

    [되돌림값]
    변환된 값을 돌려준다.

    [설명] c를 ASCII문자로 변환한다.

    24.1.404. _tolower()

    [형식]
    #include <ctype.h>
    int _tolower(c);

    [매개변수]
    int c : 변환할 값.

    [되돌림값]
    성공하면 변환된 값을 돌려준다.

    [설명] c를 무조건 소문자로 변환한다.

    24.1.405. tolower()

    [형식]
    #include <ctype.h>
    int tolower(ch);

    [매개변수]
    int ch : 변환할 값.

    [되돌림값]
    성공하면 변환된 값을 돌려준다.

    [설명] 대문자일 경우 ch를 소문자로 변환한다.

    24.1.406. _toupper()

    [형식]
    #include <ctype.h>
    int _toupper(c);

    [매개변수]
    int c : 변환할 값.

    [되돌림값]
    성공하면 변환된 값을 돌려준다.

    [설명] c를 무조건 대문자로 변환한다.

    24.1.407. toupper()

    [형식]
    #include <ctype.h>
    int toupper(ch);

    [매개변수]
    int c

    [매개변수]
    int ch : 변환할 값.

    [되돌림값]
    성공하면 변환된 값을 돌려준다.

    [설명] 소문자일 경우 ch를 대문자로 변환한다.

    24.1.408. tzset()

    [형식]
    #include <time.h>
    void tzset(void);

    [매개변수]
    없음.

    [되돌림값]
    없음.

    [설명] 환경 변수 TZ을 기초로 유닉스 time과 호환성 있게 글로발 변수의 값을 설정한다.

    -- -- 24.1.409. ultoa()

    [형식]
    #include <stdlib.h>
    char *ultoa(value, string, radix);

    [매개변수]
    unsigned long value : 변환하는 값.
    char *string : 변환 후 결과를 저장하는 문자열.
    int radix : 기수.

    [되돌림값]
    string을 돌려준다.

    [설명] 부호 없는 장정수를 문자열로 변환한다.

    24.1.410. ungetc()

    [형식]
    #include <stdio.h>
    int ungetc(c, fp);

    [매개변수]
    int c : 밀어내는 문자.
    FILE *fp : 파일 포인터.

    [되돌림값]
    성공하면 밀어내는 문자를 돌려준다. 실패하면 EOF를 돌려준다.

    [설명] 입력 스트림에 문자 c를 되밀어 보낸다.

    24.1.411. ungetch()

    [형식]
    #include <conio.h>
    int ungetch(ch);

    [매개변수]
    int ch : 밀어내는 문자.

    [되돌림값]
    성공하면 문자 ch를, 실패하면 EOF를 돌려준다.

    [설명] 콘솔로 문자 ch를 되밀어 보내고 다음 문자를 읽을 수 있도록 한다.

    24.1.412. unixtodos()

    [형식]
    #include <dos.h>
    void unixtodos(time, d, t);

    [매개변수]
    long time : 변환하는 UNIX 시간.
    struct date *d : 날짜를 저장하는 구조체 포인터.
    struct date *t : 시간을 저장하는 구조체 포인터.

    [되돌림값]
    없음.

    [설명] 날짜와 시간을 DOS 형식으로 바꾼다.

    24.1.413. unlink()

    [형식]
    #include <dos.h>
    #include <io.h>
    #include <stdio.h>
    int unlink(filename);

    [매개변수]
    const char *filename : 삭제할 파일 이름.

    [되돌림값]
    성공하면 0을, 실패하면 -1을 돌려준다.

    [설명] 파일을 삭제한다.

    24.1.414. unlock()

    [형식]
    #include <io.h>
    int lock(handle, offset, length);

    [매개변수]
    int handle : 파일 핸들러 번호.
    long offset : 록이 해제되는 영역의 옵셋.
    long length : 록이 해제되는 영역의 길이.

    [되돌림값]
    성공하면 0을, 실패하면 -1을 돌려준다.

    [설명] 파일 공유 록을 해제한다.

    24.1.415. va_ 로 시작하는 함수

    [형식]
    #include <stdarg.h>
    void va_start(ap, parmN);
    void va_arg(ap, type);
    void va_end(ap);

    [매개변수]
    va_list ap : 변수 인수.
    parmN : 고정 인수의 마지막 인수.
    type : 변환 형태.

    [되돌림값]
    va_arg는 현재 인수를 돌려준다. va_start와 va_end는 되돌림값이 없다.

    [설명] 변수 인수 목록을 처리한다.

    24.1.416. vfprintf()

    [형식]
    #include <stdio.h>
    int vfprintf(fp, format, arglist);

    [매개변수]
    FILE *fp : 파일 포인터.
    const char *format : 포맷.
    va_list arglist : 인수 목록의 포인터.

    [되돌림값]
    출력된 바이트 수를 돌려준다. 오류가 발생하면 EOF를 돌려준다.

    [설명] 인수 목록을 사용해 스트림에 포맷된 출력을 실시한다.

    24.1.417. vfscanf()

    [형식]
    #include <stdio.h>
    int vfscanf(fp, format, arglist);

    [매개변수]
    FILE *fp : 파일 포인터.
    const char *format : 포맷.
    va_list arglist : 인수 목록의 포인터.

    [되돌림값]
    성공하면 필드의 수를, 실패하면 0이나 EOF를 돌려준다.

    [설명] 인수 목록을 사용해 스트림에 포맷된 입력을 실시한다.

    24.1.418. vprintf()

    [형식]
    #include <stdio.h>
    int vprintf(format, arglist);

    [매개변수]
    const char *format : 포맷.
    va_list arglist : 인수 목록의 포인터.

    [되돌림값]
    성공하면 출력된 바이트 수를, 실패하면 EOF를 돌려준다.

    [설명] stdout로 포맷에 의한 출력을 실시한다.

    24.1.419. vscanf()

    [형식]
    #include <stdio.h>
    int vscanf(format, arglist);

    [매개변수]
    const char *format : 포맷.
    va_list arglist : 인수 목록의 포인터.

    [되돌림값]
    성공하면 필수 수를, 실패하면 0이나 EOF를 돌려준다.

    [설명] stdin으로 포맷에 의한 입력을 실시한다.

    24.1.420. vsprintf()

    [형식]
    #include <stdio.h>
    int vsprintf(buffer, format, arglist);

    [매개변수]
    char *buffer : 결과를 저장하는 버퍼.
    const char *format : 포맷.
    va_list arglist : 인수 목록의 포인터.

    [되돌림값]
    성공하면 출력된 바이트 수를, 실패하면 EOF를 돌려준다.

    [설명] 문자열을 포맷에 의해 출력한다.

    24.1.421. vsscanf()

    [형식]
    #include <stdio.h>
    int vsprintf(buffer, format, arglist);

    [매개변수]
    char *buffer : 입력할 문자열이 저장된 버퍼.
    const char *format : 포맷.
    va_list arglist : 인수 목록의 포인터.

    [되돌림값]
    성공하면 필드 수를, 실패하면 0이나 EOF를 돌려준다.

    [설명] 스트림에서 문자열을 입력하고 포맷에 의해 변환한다.

    24.1.422. wherex()

    [형식]
    #include <conio.h>
    int wherex(void);

    [매개변수]
    없음.

    [되돌림값]
    없음.

    [설명] 윈도 안에 있는 현재 커서 위치의 x 좌표를 구한다.

    24.1.423. wherey()

    [형식]
    #include <conio.h>
    int wherey(void);

    [매개변수]
    없음.

    [되돌림값]
    없음.

    [설명] 윈도 안에 있는 현재 커서 위치의 y 좌표를 구한다.

    24.1.424. window()

    [형식]
    #include <conio.h>
    void window(left, top, right, bottom);

    [매개변수]
    int left : 윈도의 왼쪽.
    int top : 윈도의 위쪽.
    int right : 윈도의 오른쪽.
    int bottom : 윈도의 아래쪽.

    [되돌림값]
    없음.

    [설명] 화면에 텍스트 윈도를 설정한다.

    24.1.425. _write()

    [형식]
    #include <io.h>
    int write(handle, buf, len);

    [매개변수]
    int handle : 파일 핸들러 번호.
    char *buf : 기록할 내용이 저장된 버퍼.
    unsigned len : 기록할 길이 바이트 수.

    [되돌림값]
    성공하면 출력된 바이트 수를, 실패하면 -1을 돌려준다.

    [설명] 파일에 버퍼의 내용을 기록한다.

    24.1.426. write()

    [형식]
    #include <io.h>
    int write(handle, buf, len);

    [매개변수]
    int handle : 파일 핸들러 번호.
    char *buf : 기록할 내용이 저장된 버퍼.
    unsigned len : 기록할 길이 바이트 수.

    [되돌림값]
    성공하면 출력된 바이트 수를, 실패하면 -1을 돌려준다.

    [설명] 파일에 버퍼의 내용을 기록한다.

    24.2.볼랜드C++ 3.1 함수 목록(가나다순)


    다음 내용은 볼랜드C++ 3.1의 함수 목록입니다. 앞서 요약한 터보C 2.0의 함수 목록과 비교하면 어떤 함수가 빠지고, 추가되었는지 알 수 있습니다. 터보C의 함수와 이름이 같은 것은 볼랜드C++ 3.1의 도움말을 이용하여 함수 설명과 사용법을 익힐 수 있습니다.

    볼랜드C++에는 함수 도움말 아래 부분에 [Examples] 항목이 있습니다. 이 항목을 이용하면 해당 함수의 예제 파일을 볼 수 있습니다. 즉 printf() 함수의 사용법을 알고 싶다면 볼랜드C++에서 [Ctrl] + [F1]을 누른 다음에 맨 아래에 있는 [Examples] 항목에서 [printf example]을 선택하면 됩니다. 또 abs() 함수의 사용법을 알고 싶다면 도움말에서 맨 아래 쪽에 있는 [abs example]을 선택하면 됩니다.

    이처럼 터보C와 볼랜드C++ 3.1에서 동시에 지원하는 함수는 볼랜드C++ 3.1의 예제를 이용해 사용법을 익힐 수 있습니다. 참고하기 바랍니다.

    [볼랜드C++ 3.1 함수 목록]

    __emit__
    _atold
    _bios_equiplist
    _bios_memsize
    _bios_timeofday
    _c_exit
    _cexit
    _chain_intr
    _chdrive
    _chmod
    _clear87
    _close
    _creat
    _disable
    _dos_close
    _dos_creat
    _dos_creatnew
    _dos_findfirst
    _dos_findnext
    _dos_getdate
    _dos_getdiskfree
    _dos_getdrive
    _dos_getfileattr
    _dos_getftime
    _dos_gettime
    _dos_getvect
    _dos_open
    _dos_read
    _dos_setdate
    _dos_setdrive
    _dos_setfileattr
    _dos_setftime
    _dos_settime
    _dos_setvect
    _dos_write
    _enable
    _exit
    _fmemccpy
    _fmemchr
    _fmemcmp
    _fmemcpy
    _fmemicmp
    _fmemset
    _fsopen
    _fstrcat
    _fstrchr
    _fstrcspn
    _fstrdup
    _fstricmp
    _fstrlen
    _fstrlwr
    _fstrncat
    _fstrncmp
    _fstrncpy
    _fstrnicmp
    _fstrnset
    _fstrpbrk
    _fstrrchr
    _fstrrev
    _fstrset
    _fstrspn
    _fstrstr
    _fstrtok
    _fstrupr
    _fullpath
    _getdcwd
    _getdrive
    _lrotl
    _lrotr
    _makepath
    _matherrl
    _open
    _read
    _rotl
    _rotr
    _searchenv
    _splitpath
    _status87
    _strdate
    _strerror
    _strtime
    _strtold
    _tolower
    _toupper
    _write
    abort
    abs
    access
    acos
    acosl
    arg
    alloca
    asctime
    asin
    asinl
    assert
    atan
    atan2
    atan2l
    atanl
    atexit
    atof
    atoi
    atol
    bcd
    bdos
    bdosptr
    biosequip
    biosmemory
    biostime
    bsearch
    cabs
    cabsl
    calloc
    ceil
    ceill
    chdir
    chmod
    chsize
    clearerr
    clock
    close
    closedir
    clreol
    clrscr
    complex
    conj
    cos
    cosh
    coshl
    cosl
    country
    cprintf
    creat
    creatnew
    creattemp
    cscanf
    ctime
    ctrlbrk
    difftime
    disable
    div
    dosexterr
    dostounix
    dup
    dup2
    ecvt
    enable
    eof
    execl
    execle
    execlp
    execlpe
    execv
    execve
    execvp
    execvpe
    exit
    exp
    expl
    fabs
    fabsl
    farcalloc
    farfree
    farmalloc
    farrealloc
    fclose
    fcloseall
    fcmp
    fcvt
    fdopen
    feof
    ferror
    fflush
    fgetc
    fgetchar
    fgetpos
    fgets
    filelength
    fileno
    findfirst
    findnext
    floor
    floorl
    flushall
    fmod
    fmodl
    fnmerge
    fnsplit
    fopen
    FP_OFF
    FP_SEG
    fprintf
    fputc
    fputchar
    fputs
    fread
    free
    freopen
    frexp
    frexpl
    fscanf
    fseek
    fsetpos
    fstat
    ftell
    ftime
    fwrite
    gcvt
    geninterrupt
    getc
    getcbrk
    getch
    getche
    getchar
    getcurdir
    getcwd
    getdate
    getdfree
    getdisk
    getdta
    getenv
    getfat
    getfatd
    getftime
    getpid
    getpsp
    gets
    gettime
    getvect
    getverify
    getw
    gmtime
    gotoxy
    hypot
    hypotl
    imag
    inp
    inport
    inportb
    inpw
    int86
    int86x
    intdos
    intdosx
    intr
    ioctl
    isalnum
    isalpha
    isascii
    isatty
    iscntrl
    isdigit
    isgraph
    islower
    isprint
    ispunct
    isspace
    isupper
    isxdigit
    itoa
    kbhit
    labs
    ldexp
    ldexpl
    ldiv
    lfind
    localeconv
    localtime
    lock
    locking
    log
    log10
    log10l
    logl
    longjmp
    lsearch
    lseek
    ltoa
    malloc
    matherr
    max
    mblen
    mbstowcs
    mbtowc
    memccpy
    memchr
    memcmp
    memcpy
    memicmp
    memmove
    memset
    min
    MK_FP
    mkdir
    mktemp
    mktime
    modf
    modfl
    movedata
    movmem
    norm
    open
    opendir
    outp
    outport
    outportb
    outpw
    parsfnm
    peek
    peekb
    perror
    poke
    pokeb
    polar
    poly
    polyl
    pow
    pow10
    pow10l
    powl
    printf
    putc
    putch
    putchar
    putenv
    puts
    putw
    qsort
    raise
    rand
    random
    randomize
    read
    readdir
    real
    realloc
    remove
    rename
    rewind
    rewinddir
    rmdir
    rmtmp
    scanf
    searchpath
    segread
    setbuf
    setcbrk
    setdate
    setdisk
    setdta
    setftime
    setjmp
    setlocale
    setmem
    setmode
    set_new_handler
    settime
    setvbuf
    setvect
    setverify
    signal
    sin
    sinh
    sinhl
    sinl
    sopen
    spawnl
    spawnle
    spawnlp
    spawnlpe
    spawnv
    spawnve
    spawnvp
    spawnvpe
    sprintf
    sqrt
    sqrtl
    srand
    sscanf
    stat
    stime
    stpcpy
    strcat
    strchr
    strcmp
    strcmpi
    strcoll
    strcpy
    strcspn
    strdup
    strerror
    strftime
    stricmp
    strlen
    strlwr
    strncat
    strncmp
    strncmpi
    strncpy
    strnicmp
    strnset
    strpbrk
    strrchr
    strrev
    strset
    strspn
    strstr
    strtod
    strtok
    strtol
    strtoul
    strupr
    strxfrm
    swab
    tan
    tanh
    tanhl
    tanl
    tell
    tempnam
    time
    tmpfile
    tmpnam
    toascii
    tolower
    toupper
    tzset
    ultoa
    umask
    ungetc
    ungetch
    unixtodos
    unlink
    unlock
    utime
    va_arg
    va_end
    va_list
    va_start
    vfprintf
    vfscanf
    vprintf
    vscanf
    vsprintf
    vsscanf
    wcstombs
    wctomb
    wherex
    wherey
    write

    'c or linux' 카테고리의 다른 글

    POSIX 쓰레드로 멀티 쓰레드 프로그래밍하기  (0) 2005.02.18
    함수 포인터  (0) 2005.02.16
    ctags 활용  (0) 2005.02.15
    #ifdef __cplusplus  (1) 2005.02.12
    Setjmp()  (0) 2005.02.11
    Posted by '김용환'
    ,

    web.xml 설명.

    web 2005. 2. 4. 07:15

    web.xml Deployment Descriptor Elements

     

    This following sections describe the deployment descriptor elements defined in the web.xml file. The root element for web.xml is <web-app>. The following elements are defined within the <web-app> element:

     


    icon Element

    The icon element specifies the location within the Web Application for a small and large image used to represent the Web Application in a GUI tool. (The servlet element also has an element called the icon element, used to supply an icon to represent a servlet in a GUI tool.)

    This element is not currently used by WebLogic Server.

    The following table describes the elements you can define within an icon element.

    Element

    Required/
    Optional

    Description

    <small-icon>

    Optional

    Location for a small (16x16 pixel) .gif or .jpg image used to represent the Web Application in a GUI tool. Currently, this is not used by WebLogic Server.

    <large-icon>

    Optional

    Location for a large (32x32 pixel) .gif or .jpg image used to represent the Web Application in a GUI tool. Currently, this element is not used by WebLogic Server.

     


    display-name Element

    The optional display-name element specifies the Web Application display name, a short name that can be displayed by GUI tools.

    Element

    Required/
    Optional

    Description

    <display-name>

    Optional

    Currently, this element is not used by WebLogic Server.

     


    description Element

    The optional description element provides descriptive text about the Web Application.

    Element

    Required/
    Optional

    Description

    <description>

    Optional

    Currently, this element is not used by WebLogic Server.

     


    distributable Element

    The distributable element is not used by WebLogic Server.

    Element

    Required/
    Optional

    Description

    <distributable>

    Optional

    Currently, this element is not used by WebLogic Server.

     


    context-param Element

    The optional context-param element declares a Web Application's servlet context initialization parameters. You set each context-param within a single context-param element, using <param-name> and <param-value> elements. You can access these parameters in your code using the javax.servlet.ServletContext.getInitParameter() and javax.servlet.ServletContext.getInitParameterNames() methods.

    The following table describes the elements you can define within a context-param element.

    Element

    Required/
    Optional

    Description

    <param-name>

    Required

    The name of a parameter.

    <param-value>

    Required

    The value of a parameter.

    <description>

    Optional

    A text description of a parameter.

     


    filter Element

    The filter element defines a filter class and its initialization parameters. For more information on filters, see Configuring Filters.

    The following table describes the elements you can define within a servlet element.

    Element

    Required/
    Optional

    Description

    <icon>

    Optional

    Specifies the location within the Web Application for a small and large image used to represent the filter in a GUI tool. Contains a small-icon and large-icon element.

    Currently, this element is not used by WebLogic Server.

    <filter-name>

    Required

    Defines the name of the filter, used to reference the filter definition elsewhere in the deployment descriptor.

    <display-name>

    Optional

    A short name intended to be displayed by GUI tools.

    <description>

    Optional

    A text description of the filter.

    <filter-class>

    Required

    The fully-qualified class name of the filter.

    <init-param>

    Optional

    Contains a name/value pair as an initialization parameter of the filter.

    Use a separate set of <init-param> tags for each parameter.

     


    filter-mapping Element

    The following table describes the elements you can define within a filter-mapping element.

    Element

    Required/
    Optional

    Description

    <filter-name>

    Required

    The name of the filter to which you are mapping a URL pattern or servlet. This name corresponds to the name assigned in the <filter> element with the <filter-name> element.

    <url-pattern>

    Required - or map by <servlet>

    Describes a pattern used to resolve URLs. The portion of the URL after the http://host:port + ContextPath is compared to the <url-pattern> by WebLogic Server. If the patterns match, the filter mapped in this element is called.

    Example patterns:

    /soda/grape/*
    /foo/*
    /contents
    *.foo

    The URL must follow the rules specified in Section 10 of the Servlet 2.2 Specification.

    <servlet>

    Required - or map by <url-pattern>

    The name of a servlet which, if called, causes this filter to execute.

     


    listener Element

    Define an application listener using the listener element.

    Element

    Required/
    Optional

    Description

    <listener-class>

    Optional

    Name of the class that responds to a Web Application event.

    For more information, see Configuring an Event Listener.

     


    servlet Element

    The servlet element contains the declarative data of a servlet.

    If a jsp-file is specified and the <load-on-startup> element is present, then the JSP is precompiled and loaded when WebLogic Server starts.

    The following table describes the elements you can define within a servlet element.

    Element

    Required/
    Optional

    Description

    <icon>

    Optional

    Location within the Web Application for a small and large image used to represent the servlet in a GUI tool. Contains a small-icon and large-icon element.

    Currently, this element is not used by WebLogic Server.

    <servlet-name>

    Required

    Defines the canonical name of the servlet, used to reference the servlet definition elsewhere in the deployment descriptor.

    <display-name>

    Optional

    A short name intended to be displayed by GUI tools.

    <description>

    Optional

    A text description of the servlet.

    <servlet-class>

    Required (or use <jsp-
    file>)

    The fully-qualified class name of the servlet.

    Use only one of either the <servlet-class> tags or <jsp-file> tags in your servlet body.

    <jsp-file>

    Required (or use <servlet-
    class>)

    The full path to a JSP file within the Web Application, relative to the Web Application root directory.

    Use only one of either the <servlet-class> tags or <jsp-file> tags in your servlet body.

    <init-param>

    Optional

    Contains a name/value pair as an initialization parameter of the servlet.

    Use a separate set of <init-param> tags for each parameter.

    <load-on-startup>

    Require

    WebLogic Server initializes this servlet when WebLogic Server starts up. The content of this element must be a positive integer indicating the order in which the servlet should be loaded. Lower integers are loaded before higher integers. If no value is specified, or if the value specified is not a positive integer, WebLogic Server can load the servlet in any order in the startup sequence.

    <security-role-
    ref>

    Optional

    Used to link a security role name defined by <security-role> to an alternative role name that is hard coded in the servlet logic. This extra layer of abstraction allows the servlet to be configured at deployment without changing servlet code.

    icon Element

    This is an element within the servlet Element.

    The icon element specifies the location within the Web Application for small and large images used to represent the servlet in a GUI tool.

    The following table describes the elements you can define within an icon element.

    Element

    Required/
    Optional

    Description

    <small-icon>

    Optional

    Specifies the location within the Web Application for a small (16x16 pixel) .gif or .jpg image used to represent the servlet in a GUI tool.

    Currently, this element is not used by WebLogic Server.

    <large-icon>

    Optional

    Specifies the location within the Web Application for a small (32x32 pixel) .gif or .jpg image used to represent the servlet in a GUI tool.

    Currently, this element is not used by WebLogic Server.

    init-param Element

    This is an element within the servlet Element.

    The optional init-param element contains a name/value pair as an initialization parameter of the servlet. Use a separate set of init-param tags for each parameter.

    You can access these parameters with the javax.servlet.ServletConfig.getInitParameter() method.

    The following table describes the elements you can define within a init-param element.

    Element

    Required/
    Optional

    Description

    <param-name>

    Required

    Defines the name of this parameter.

    <param-value>

    Required

    Defines a String value for this parameter.

    <description>

    Optional

    Text description of the initialization parameter.

    WebLogic Server recognizes the special initialization parameter, wl-dispatch-policy, to assign a servlet or JSP to an available execute queue. For example, the following example assigns a servlet to use the execute threads available in an execute queue named CriticalWebApp:

    <servlet>
       ...
       <init-param>
          <param-name>wl-dispatch-policy</param-name>
          <param-value>CriticalWebApp</param-value>
       </init-param>
    </servlet>
    

    If the CriticalWebApp queue is not available, the servlet will use execute threads available in the default WebLogic Server execute queue. See Setting Thread Count for more information about configuring execute threads in WebLogic Server. See Using Execute Queues to Control Thread Usage for more information about creating and using queues.

    security-role-ref Element

    This is an element within the servlet Element.

    The security-role-ref element links a security role name defined by <security-role> to an alternative role name that is hard-coded in the servlet logic. This extra layer of abstraction allows the servlet to be configured at deployment without changing servlet code.

    The following table describes the elements you can define within a security-role-ref element.

    Element

    Required/
    Optional

    Description

    <description>

    Optional

    Text description of the role.

    <role-name>

    Required

    Defines the name of the security role or principal that is used in the servlet code.

    <role-link>

    Required

    Defines the name of the security role that is defined in a <security-role> element later in the deployment descriptor.

     


    servlet-mapping Element

    The servlet-mapping element defines a mapping between a servlet and a URL pattern.

    The following table describes the elements you can define within a servlet-mapping element.

    Element

    Required/
    Optional

    Description

    <servlet-name>

    Required

    The name of the servlet to which you are mapping a URL pattern. This name corresponds to the name you assigned a servlet in a <servlet> declaration tag.

    <url-pattern>

    Required

    Describes a pattern used to resolve URLs. The portion of the URL after the http://host:port + WebAppName is compared to the <url-pattern> by WebLogic Server. If the patterns match, the servlet mapped in this element will be called.

    Example patterns:

    /soda/grape/*
    /foo/*
    /contents
    *.foo

    The URL must follow the rules specified in Section 10 of the Servlet 2.2 Specification.

    For additional examples of servlet mapping, see Servlet Mapping.

     


    session-config Element

    The session-config element defines the session parameters for this Web Application.

    The following table describes the element you can define within a session-config element.

    Element

    Required/
    Optional

    Description

    <session-timeout>

    Optional

    The number of minutes after which sessions in this Web Application expire. The value set in this element overrides the value set in the TimeoutSecs parameter of the <session-descriptor> element in the WebLogic-specific deployment descriptor weblogic.xml, unless one of the special values listed here is entered.

    Default value: -2

    Maximum value: Integer.MAX_VALUE ÷ 60

    Special values:

    • -2 = Use the value set by TimeoutSecs in <session-descriptor> element of weblogic.xml

    • -1 = Sessions do not timeout. The value set in <session-descriptor> element of weblogic.xml is ignored.

    For more information, see session-descriptor Element.

     


    mime-mapping Element

    The mime-mapping element defines a mapping between an extension and a mime type.

    The following table describes the elements you can define within a mime-mapping element.

    Element

    Required/
    Optional

    Description

    <extension>

    Required

    A string describing an extension, for example: txt.

    <mime-type>

    Required

    A string describing the defined mime type, for example: text/plain. The following default mime types are provided with WebLogic Server (you can override these):

    setIfNone(mimeTypesMap, "html", "text/html");

    setIfNone(mimeTypesMap, "htm", "text/html");

    setIfNone(mimeTypesMap, "gif", "image/gif");

    setIfNone(mimeTypesMap, "jpeg", "image/jpeg");

    setIfNone(mimeTypesMap, "jpg", "image/jpeg");

    setIfNone(mimeTypesMap, "pdf", "application/pdf");

    setIfNone(mimeTypesMap, "zip", "application/zip");

    setIfNone(mimeTypesMap, "class", "application/x-java-vm");

    setIfNone(mimeTypesMap, "jar", "application/x-java-archive");

    setIfNone(mimeTypesMap, "ser",

    "application/x-java-serialized-object"); setIfNone(mimeTypesMap,

    "exe", "application/octet-stream"); setIfNone(mimeTypesMap, "txt",

    "text/plain"); setIfNone(mimeTypesMap, "java", "text/plain"); // This

    is for JavaWebStart out of the box work setIfNone(mimeTypesMap,

    "jnlp", "application/x-java-jnlp-file");

     


    welcome-file-list Element

    The optional welcome-file-list element contains an ordered list of welcome-file elements.

    When the URL request is a directory name, WebLogic Server serves the first file specified in this element. If that file is not found, the server then tries the next file in the list.

    For more information, see Configuring Welcome Pages and How WebLogic Server Resolves HTTP Requests.

    The following table describes the element you can define within a welcome-file-list element.

    Element

    Required/
    Optional

    Description

    <welcome-file>

    Optional

    File name to use as a default welcome file, such as index.html

     


    error-page Element

    The optional error-page element specifies a mapping between an error code or exception type to the path of a resource in the Web Application.

    When an error occurs—while WebLogic Server is responding to an HTTP request, or as a result of a Java exception—WebLogic Server returns an HTML page that displays either the HTTP error code or a page containing the Java error message. You can define your own HTML page to be displayed in place of these default error pages or in response to a Java exception.

    For more information, see Customizing HTTP Error Responses and How WebLogic Server Resolves HTTP Requests.

    The following table describes the elements you can define within an error-page element.

    Note: Define either an <error-code> or an <exception-type> but not both.

    Element

    Required/
    Optional

    Description

    <error-code>

    Optional

    A valid HTTP error code, for example, 404.

    <exception-type>

    Optional

    A fully-qualified class name of a Java exception type, for example, java.lang.string

    <location>

    Required

    The location of the resource to display in response to the error. For example, /myErrorPg.html.

     


    taglib Element

    The optional taglib element describes a JSP tag library.

    This element associates the location of a JSP Tag Library Descriptor (TLD) with a URI pattern. Although you can specify a TLD in your JSP that is relative to the WEB-INF directory, you can also use the <taglib> tag to configure the TLD when deploying your Web Application. Use a separate element for each TLD.

    The following table describes the elements you can define within a taglib element.

    Element

    Required/
    Optional

    Description

    <taglib-location>

    Required

    Gives the file name of the tag library descriptor relative to the root of the Web Application. It is a good idea to store the tag library descriptor file under the WEB-INF directory so it is not publicly available over an HTTP request.

    <taglib-uri>

    Required

    Describes a URI, relative to the location of the web.xml document, identifying a Tag Library used in the Web Application.

    If the URI matches the URI string used in the taglib directive on the JSP page, this taglib is used.

     


    resource-ref Element

    The optional resource-ref element defines a reference lookup name to an external resource. This allows the servlet code to look up a resource by a "virtual" name that is mapped to the actual location at deployment time.

    Use a separate <resource-ref> element to define each external resource name. The external resource name is mapped to the actual location name of the resource at deployment time in the WebLogic-specific deployment descriptor weblogic.xml.

    The following table describes the elements you can define within a resource-ref element.

    Element

    Required/
    Optional

    Description

    <description>

    Optional

    A text description.

    <res-ref-name>

    Required

    The name of the resource used in the JNDI tree. Servlets in the Web Application use this name to look up a reference to the resource.

    <res-type>

    Required

    The Java type of the resource that corresponds to the reference name. Use the full package name of the Java type.

    <res-auth>

    Required

    Used to control the resource sign on for security.

    If set to APPLICATION, indicates that the application component code performs resource sign on programmatically. If set to CONTAINER WebLogic Server uses the security context established with the login-config element. See login-config Element.

    <res-sharing-scope>

    Optional

    Specifies whether connections obtained through the given resource manager connection factory reference can be shared.

    Valid values:

    • Shareable

    • Unshareable

     


    security-constraint Element

    The security-constraint element defines the access privileges to a collection of resources defined by the <web-resource-collection> element.

    For more information, see Configuring Security in Web Applications.

    The following table describes the elements you can define within a security-constraint element.

    Element

    Required/
    Optional

    Description

    <web-resource-
    collection>

    Required

    Defines the components of the Web Application to which this security constraint is applied.

    <auth-constraint>

    Optional

    Defines which groups or principals have access to the collection of web resources defined in this security constraint. See also auth-constraint Element.

    <user-data-
    constraint>

    Optional

    Defines how the client should communicate with the server.

    See also user-data-constraint Element

    web-resource-collection Element

    Each <security-constraint> element must have one or more <web-resource-collection> elements. These define the area of the Web Application to which this security constraint is applied.

    This is an element within the security-constraint Element.

    The following table describes the elements you can define within a web-resource-collection element.

    Element

    Required/
    Optional

    Description

    <web-resource-
    name>

    Required

    The name of this Web resource collection.

    <description>

    Optional

    A text description of this security constraint.

    <url-pattern>

    Optional

    Use one or more of the <url-pattern> elements to declare to which URL patterns this security constraint applies. If you do not use at least one of these elements, this <web-resource-collection> is ignored by WebLogic Server.

    <http-method>

    Optional

    Use one or more of the <http-method> elements to declare which HTTP methods (usually, GET or POST) are subject to the authorization constraint. If you omit the <http-method> element, the default behavior is to apply the security constraint to all HTTP methods.

    auth-constraint Element

    This is an element within the security-constraint Element.

    The optional auth-constraint element defines which groups or principals have access to the collection of Web resources defined in this security constraint.

    The following table describes the elements you can define within an auth-constraint element.

    Element

    Required/
    Optional

    Description

    <description>

    Optional

    A text description of this security constraint.

    <role-name>

    Optional

    Defines which security roles can access resources defined in this security-constraint. Security role names are mapped to principals using the security-role-ref Element. See security-role-ref Element.

    user-data-constraint Element

    This is an element within the security-constraint Element.

    The user-data-constraint element defines how the client should communicate with the server.

    The following table describes the elements you may define within a user-data-constraint element.

    Element

    Required/
    Optional

    Description

    <description>

    Optional

    A text description.

    <transport-
    guarantee>

    Required

    Specifies that the communication between client and server.

    WebLogic Server establishes a Secure Sockets Layer (SSL) connection when the user is authenticated using the INTEGRAL or CONFIDENTIAL transport guarantee.

    Range of values:

    • NONE—The application does not require any transport guarantees.

    • INTEGRAL—The application requires that the data be sent between the client and server in such a way that it cannot be changed in transit.

    • CONFIDENTIAL—The application requires that data be transmitted so as to prevent other entities from observing the contents of the transmission.

     


    login-config Element

    Use the optional login-config element to configure how the user is authenticated; the realm name that should be used for this application; and the attributes that are needed by the form login mechanism.

    If this element is present, the user must be authenticated in order to access any resource that is constrained by a <security-constraint> defined in the Web Application. Once authenticated, the user can be authorized to access other resources with access privileges.

    The following table describes the elements you can define within a login-config element.

    Element

    Required/
    Optional

    Description

    <auth-method>

    Optional

    Specifies the method used to authenticate the user. Possible values:

    BASIC - uses browser authentication
    FORM - uses a user-written HTML form
    CLIENT-CERT

    <realm-name>

    Optional

    The name of the realm that is referenced to authenticate the user credentials. If omitted, the realm defined with the Auth Realm Name field on the Web Application—> Configuration—>Other tab of the Administration Console is used by default. For more information, see Specifying a Security Realm.

    Note: The <realm-name> element does not refer to security realms within WebLogic Server. This element defines the realm name to use in HTTP Basic authorization.

    Note: The system security realm is a collection of security information that is checked when certain operations are performed in the server. The servlet security realm is a different collection of security information that is checked when a page is accessed and basic authentication is used.

    <form-login-
    config>

    Optional

    Use this element if you configure the <auth-method> to FORM. See form-login-config Element.

    form-login-config Element

    This is an element within the login-config Element.

    Use the <form-login-config> element if you configure the <auth-method> to FORM.

    .

    Element

    Required/
    Optional

    Description

    <form-login-page>

    Required

    The URI of a Web resource relative to the document root, used to authenticate the user. This can be an HTML page, JSP, or HTTP servlet, and must return an HTML page containing a FORM that conforms to a specific naming convention. For more information, see Setting Up Authentication for Web Applications.

    <form-error-page>

    Required

    The URI of a Web resource relative to the document root, sent to the user in response to a failed authentication login.

     


    security-role Element

    The following table describes the elements you can define within a security-role element.

    Element

    Required/
    Optional

    Description

    <description>

    Optional

    A text description of this security role.

    <role-name>

    Required

    The role name. The name you use here must have a corresponding entry in the WebLogic-specific deployment descriptor, weblogic.xml, which maps roles to principals in the security realm. For more information, see security-role-assignment Element.

     


    env-entry Element

    The optional env-entry element declares an environment entry for an application. Use a separate element for each environment entry.

    The following table describes the elements you can define within an env-entry element.

    Element

    Required/
    Optional

    Description

    <description>

    Optional

    A textual description.

    <env-entry-name>

    Required

    The name of the environment entry.

    <env-entry-value>

    Required

    The value of the environment entry.

    <env-entry-type>

    Required

    The type of the environment entry.

    Can be set to one of the following Java types:

    java.lang.Boolean

    java.lang.String

    java.lang.Integer

    java.lang.Double

    java.lang.Float

     


    ejb-ref Element

    The optional ejb-ref element defines a reference to an EJB resource. This reference is mapped to the actual location of the EJB at deployment time by defining the mapping in the WebLogic-specific deployment descriptor file, weblogic.xml. Use a separate <ejb-ref> element to define each reference EJB name.

    The following table describes the elements you can define within an ejb-ref element.

    Element

    Required/
    Optional

    Description

    <description>

    Optional

    A text description of the reference.

    <ejb-ref-name>

    Required

    The name of the EJB used in the Web Application. This name is mapped to the JNDI tree in the WebLogic-specific deployment descriptor weblogic.xml. For more information, see ejb-reference-description Element.

    <ejb-ref-type>

    Required

    The expected Java class type of the referenced EJB.

    <home>

    Required

    The fully qualified class name of the EJB home interface.

    <remote>

    Required

    The fully qualified class name of the EJB remote interface.

    <ejb-link>

    Optional

    The <ejb-name> of an EJB in an encompassing J2EE application package.

    <run-as>

    Optional

    A security role whose security context is applied to the referenced EJB. Must be a security role defined with the <security-role> element.

     

    'web' 카테고리의 다른 글

    [펌] Axis Webservice 설치및 테스트  (0) 2005.09.03
    [펌] web.xml 사용법  (0) 2005.07.23
    Tomcat 4.1.12 버전에서 서블릿 접근  (0) 2005.02.08
    server.xml  (0) 2005.02.04
    web.xml  (0) 2005.02.04
    Posted by '김용환'
    ,

    server.xml

    web 2005. 2. 4. 06:43

    <!--
    설정 엘리먼트에 대한 설명은 아래과 같은 주요 카테고리로 분류됩니다:

    최상위 엘리먼트(Top Level Elements) :: <Server>는 전체 설정 파일의 최상위 엘리먼트이며,
    <Service>는 하나의 Engine과 결합된 Connector들의 모임을 나타냅니다.
    -- Server, Service

    커넥터(Connectors) :: 어떤 특정 Service에 요청을 보내는(그리고 응답을 받는)
    외부 클라이언트들과의 연결점(interface)을 나타냅니다.
    -- JTC Connectors, Coyote HTTP/1.1, Coyote JK 2, HTTP/1.1, JK, Webapp

    컨테이너(Containers) :: 수신된 요청을 처리하고 그에 따른 응답을 생성하는 기능을 하는
    컴포넌트들을 나타냅니다. 하나의 Engine은 하나의 Service에 대한 모든 요청을 다루며,
    하나의 Host는 특정 가상호스트에 대한 모든 요청을 다룹니다. 그리고 하나의 Context는
    특정 웹어플리케이션에 대한 모든 요청을 다룹니다.
    -- Context, Engine, Host

    내부 컴포넌트(Nested Components) :: Container에 속하는 어떤 엘리먼트 안에 중첩되어야
    하는 엘리먼트입니다. 어떤 엘리먼트는 모든 Container 엘리먼트 안에 중첩될 수도 있고,
    어떤 것은 Context 안에만 중첩가능합니다.
    -- Default Context, Global Resources, Loader, Logger, Manager,Realm, Resources, Valve

    -->

     

    <!-- Example Server Configuration File -->
    <!-- Note: 컴포넌트들은 각각의 부모-자식 관계에 따라 중첩(nested) 되었음 -->

    <!-- "Server" 는 전체 JVM 을 나타내는 싱글톤 요소입니다. 이것은 하나 이상의
         "Service" 인스턴스를 갖고 있습니다. 서버는 지정된 포트를 통해 shutdown
         명령을 받습니다.

         Note: "Server" 는 스스로가 "Container" 가 아니기 때문에, "Valves" 또는
         "Loggers" 같은 서브 컴포넌트를 "Server" 와 같은 레벨에서 정의하면 안됩
         니다.
     -->

    <Server port="8005" shutdown="SHUTDOWN" debug="0">


      <!-- "Service" 는 한 개의 "Container" 를 공유하는 하나 이상의 "Connectors"
           의 집합체입니다. (이 컨테이너 안에서 웹어플리케이션이 돌아갑니다). 보통
           은, 이 컨테이너가 "Engine" 입니다만, 요구되지는 않습니다. 

           Note:  "Service" 는 스스로가 "Container" 가 아니기 때문에, "Valves"
           또는 "Loggers" 같은 서브 컴포넌트를 "Server" 와 같은 레벨에서 정의하면
           안됩니다.
       -->


       <Listener className="org.apache.catalina.mbeans.ServerLifecycleListener"
                debug="0"/>
      <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener"
                debug="0"/>

     <!--
      GlobalNamingResources 엘리먼트는 JNDI의 전역자원을 나타내며,
      이 자원들은 Server 안에서 정의됩니다.

      웹애플리케이션에서 환경항목자원(environment entry resources)으로 사용할 수
      있도록 항목의 이름-값 들을 설정할 수 있습니다. 이 설정은 <Environment> 항목을
      이 엘리먼트 내에 중첩시키면 됩니다.
      
      예를 들어 아래와 같이 환경항목을 생성할 수 있습니다:
      
       <GlobalNamingResources ...>
        ...
        <Environment name="maxExemptions" value="10"
         type="java.lang.Integer" override="false"/>
        ...
      </GlobalNamingResources>

      이 설정은 웹애플리케이션 배치 디스크립터(/WEB-INF/web.xml)에서
      다음의 엘리먼트를 포함시킨 것과 동일합니다:
        
       <env-entry>
        <env-entry-name>maxExemptions</param-name>
        <env-entry-value>10</env-entry-value>
        <env-entry-type>java.lang.Integer</env-entry-type>
      </env-entry>

      그러나 이 값을 커스터마이즈하기 위해 배치 디스크립터를 변경할 필요는 없습니다.


      <Environment> 엘리먼트 속성값 --
      
      description :: (선택사항)이 환경항목에 대한 사람이 읽기 쉬운 간단한 설명
      
      name :: (반드시 설정) 생성할 환경항목의 이름.
      java:comp/env 컨텍스트에 대한 상대적인 이름입니다.
      
      override :: 웹애플리케이션 배치 디스크립터에서 <env-entry>으로 같은 이름의
      환경항목을 지정하는 경우, 여기에서 지정한 값을 덮어쓰기(override) 하지 않도록
      하고 싶으면 false로 지정합니다. 이 값을 지정하지 않으면 덮어쓰기가 허용됩니다.
      
      type :: (반드시 설정) 이 환경항목에 대해 웹애플리케이션이 예상하는 완전한(fully qualified) Java 클래스명.
      반드시 웹애플리케이션 배치 디스크립터의 <env-entry-type>의 규칙에 맞는 값이어야 합니다.
      그 규칙에 맞는 값 들은: java.lang.Boolean, java.lang.Byte, java.lang.Character,
      java.lang.Double, java.lang.Float, java.lang.Integer, java.lang.Long, java.lang.Short,
      또는 java.lang.String 입니다.
      
      value :: (반드시 설정) 웹애플리케이션이 JNDI 컨텍스트로부터 요청해서 반환받을 환경항목의 값.
      이 값은 반드시 위의 type에 정의된 Java type으로 변환 가능해야 합니다.
      
      
      Resource Definitions
      웹애플리케이션 배치 디스크립터의 <resource-ref>와 <resource-env-ref> 엘리먼트의
      JNDI 탐색(lookup)에 대해 반환될 자원의 특성도 선언 가능합니다.
      그리고 어떤 자원에 대해서 객체팩토리를 사용하도록(Tomcat이 아직 모르는 경우),
      그리고 그 객체팩토리를 설정하는데 사용할 프로퍼티를 설정하려면, 반드시 그 자원과 같은 이름으로
      자원 파라미터(Resource Parameters)를 추가로 정의해야 합니다.

      예를 들어 다음과 같이 자원정의가 가능합니다:
      
       <GlobalNamingResources ...>
        ...
        <Resource name="jdbc/EmployeeDB" auth="Container"
         type="javax.sql.DataSource"
        description="Employees Database for HR Applications"/>
        ...
      </GlobalNamingResources>

      이 설정은 웹애플리케이션 배치 디스크립터(/WEB-INF/web.xml)에
      다음의 엘리먼트를 포함시킨 것과 동일합니다:
        
       <resource-ref>
        <description>Employees Database for HR Applications</description>
        <res-ref-name>jdbc/EmployeeDB</res-ref-name>
        <res-ref-type>javax.sql.DataSource</res-ref-type>
        <res-auth>Container</res-auth>
      </resource-ref>

       그러나 이 값을 커스터마이즈하기 위해 배치 디스크립터를 변경할 필요는 없습니다.


      <Resource> 엘리먼트 속성값 ---

      auth :: 해당 자원관리자에 인증(sign on)할 때 웹애플리케이션 프로그램의 코드상에서 직접 인증할지,
      또는 애플리케이션의 작동(behalf)에 따라 컨테이너가 직접 인증할지를 지정합니다.
      이 속성의 값은 반드시 Application 또는 Container 중 하나여야 합니다.
      이 속성은, 웹애플리케이션이 웹애플리케이션 배치 디스크립터에서 <resource-ref> 엘리먼트를
      사용하는 경우에는 반드시 필요합니다. 그러나 <resource-env-ref>를 대신 사용하는 경우에는 선택사항입니다.
      
      description :: (선택사항)이 자원에 대한 사람이 읽기 쉬운 간단한 설명
      
      name :: (반드시설정) 생성할 자원의 이름. java:comp/env 컨텍스트에 대한 상대적인 이름입니다.
      
      scope :: 이 자원관리자를 통해 얻어진 연결(connection)의 공유를 허가할 것인지 지정합니다.
      이 속성의 값은 반드시 Shareable 또는 Unshareable 중 하나여야 합니다.
      지정하지 않으면 연결은 공유가능(shareable)이 됩니다.
      
      type :: (반드시설정) 웹애플리케이션이 이 자원에 대해 탐색을 실행할 때 받고자 하는
      Java 타입을 나타내는 완전한 Java 클래스명.
      
      
      Resource Parameters
      이 엘리먼트는 웹애플리케이션에서 해당 자원의 이름에 대해 JNDI 탐색을 수행할 때,
      객체를 반환하는데 사용할 자원관리자(또는 객체팩토리)를 설정하는 역할을 합니다.
      $CATALINA_HOME/conf/server.xml의 <Context>나 <DefaultContext> 엘리먼트 내의
      <Resource> 엘리먼트로 지정된 모든 자원 이름, 그리고/또는 웹애플리케이션 배치 디스크립터에서
      <resource-ref> 나 <resource-env-ref> 엘리먼트에서 선언된 모든 자원 이름에 대해서는 반드시
      자원 파라미터(resource parameters)를 정의해야 그 자원에 성공적으로 액세스할 수 있습니다.

      자원 파라미터는 이름으로 정의되며, 정확하게 어떤 파라미터 이름들의 집합을 지원하는가는 당신이
      사용하고 있는 자원관리자(또는 객체팩토리)에 따라 달라집니다.
      즉 해당 팩토리 클래스의 JavaBeans 프로퍼티 중 설정가능한(settable) 프로퍼티의 이름과 일치해야 합니다.
      JNDI 구현체는 지정한 팩토리 클래스의 인스턴스에 대해 JavaBeans의 모든 해당 속성의
      설정메소드(setter)를 호출함으로써 모든 설정을 마친 다음에야,
      이 팩토리 인스턴스를 JNDI lookup() 호출을 통해 사용가능하도록 할 것입니다.

      예로 JDBC 데이터 소스에 대한 자원 파라미터 설정은 아래와 같이 됩니다:
       
       <GlobalNamingResources ...>
        ...
        <ResourceParams name="jdbc/EmployeeDB">
       <parameter>
         <name>driverClassName</name>
         <value>org.hsql.jdbcDriver</value>
       </parameter>
       <parameter>
         <name>driverName</name>
         </value>jdbc:HypersonicSQL:database</value>
       </parameter>
       <parameter>
         <name>user</name>
         <value>dbusername</value>
       </parameter>
       <parameter>
         <name>password</name>
         <value>dbpassword</value>
       </parameter>
        </ResourceParams>
        ...
      </GlobalNamingResources>


      만약 특정 자원 타입에 대해 팩토리 클래스의 Java 클래스명을 지정할 필요가 있다면,
      <ResourceParams> 엘리먼트 내의 <parameter> 항목에 factory라는 이름을 사용하면 됩니다.


      <ResourceParams> 엘리먼트가 가질 수 있는 속성은 다음과 같습니다:

      name :: (반드시 설정) 설정할 자원의 이름이며, java:comp/env 컨텍스트에 대한 상대적인 이름이 됩니다.
      이 이름은 $CATALINA_HOME/conf/server.xml 내에 <Resource> 엘리먼트로 정의된 자원,
      그리고/또는 웹애플리케이션 배치 디스크립터 내에 <resource-ref> 또는 <resource-env-ref>로
      참조되는 자원의 이름과 반드시 일치해야 합니다.
      
     -->

      <!-- Global JNDI resources -->
      <GlobalNamingResources>

        <!-- Test entry for demonstration purposes -->
        <Environment name="simpleValue" type="java.lang.Integer" value="30"/>

        <!-- Editable user database that can also be used by
             UserDatabaseRealm to authenticate users -->
        <Resource name="UserDatabase" auth="Container"
                  type="org.apache.catalina.UserDatabase"
           description="User database that can be updated and saved">
        </Resource>
        <ResourceParams name="UserDatabase">
          <parameter>
            <name>factory</name>
            <value>org.apache.catalina.users.MemoryUserDatabaseFactory</value>
          </parameter>
          <parameter>
            <name>pathname</name>
            <value>conf/tomcat-users.xml</value>
          </parameter>
        </ResourceParams>

      </GlobalNamingResources>

      <!-- Tomcat Stand-Alone Service 로 설정하기 -->
      <Service name="Tomcat-Standalone">

        <!-- "Connector" 는 요청을 받아서, 응답이 반환되는 종점(endpoint)을 나타냅니
             다. 각 커넥터는 처리를 담당하는 관련된 "Container"(보통 "엔진")로 요청을
             전달해줍니다.

             기본값으로, 8080포트에 non-SSL HTTP/1.1 커넥터가 설정되어있습니다.
             SSL HTTP/1.1 커넥터 역시 사용하려면 아래에 있는 지시를 따라서 하고, 두번
             째 커넥터 엔트리의 주석표시를 지워주시면 됩니다. SSL 지원은 다음 단계를
             거쳐야 합니다:
             * JSSE 1.0.2 또는 이후 버전을 다운받아서 설치하고, JAR 파일들을
               "$JAVA_HOME/jre/lib/ext" 디렉토리에 복사해 놓습니다.
             * "$JAVA_HOME/jre/lib/security/java.security" 를 편집하고
               security.provider.2=com.sun.net.ssl.internal.ssl.Provider 를 추가합
               니다.
             * 실행: keytool -genkey -alias tomcat -keyalg RSA
               패스워드 값"changeit" 으로 실행합니다.

             기본적으로, DNS lookups 는 웹어플리케이션이 request.getRemoteHost() 를
             부를 때 동적하도록 되어있습니다. 이것은 성능에 영향을 줄 수 있기 때문에,
             "enableLookups" 속성을 "false" 로 바꿔주면 이 기능을 사용하지 않을 수
             있습니다.  DNS lookups 가 사용하지 않게 되면 request.getRemoteHost() 는
             remote client 의 IP 주소의 String 버전을 반환할 것입니다.
        -->

        <!-- 8080 포트에 non-SSL HTTP/1.1 Connector 설정하기 -->
        <Connector className="org.apache.catalina.connector.http.HttpConnector"
                   port="80" minProcessors="5" maxProcessors="75"
                   enableLookups="true" redirectPort="8443"
                   acceptCount="10" debug="0" connectionTimeout="60000"/>
        <!-- Note : 커넥션 타임아웃을 사용하지 않으려면, connectionTimeout 값을 -1로
          수정해 주세요.-->

        <!-- 8443 포트에 SSL HTTP/1.1 Connector 설정하기 -->
        <!--
        <Connector className="org.apache.catalina.connector.http.HttpConnector"
                   port="8443" minProcessors="5" maxProcessors="75"
                   enableLookups="true"
            acceptCount="10" debug="0" scheme="https" secure="true">
          <Factory className="org.apache.catalina.net.SSLServerSocketFactory"
                   clientAuth="false" protocol="TLS"/>
        </Connector>
        -->

        <!-- 8081 포트에 Proxied HTTP/1.1 Connector 설정하기 -->
        <!-- 사용법에 대한 자세한 내용은 proxy 문서를 보십시오. -->
        <!--
        <Connector className="org.apache.catalina.connector.http.HttpConnector"
                   port="8081" minProcessors="5" maxProcessors="75"
                   enableLookups="true"
                   acceptCount="10" debug="0" connectionTimeout="60000"
                   proxyPort="80"/>
        -->

        <!-- 8082 포트에 non-SSL HTTP/1.0 Test Connector 설정하기 -->
        <!--
        <Connector className="org.apache.catalina.connector.http10.HttpConnector"
                   port="8082" minProcessors="5" maxProcessors="75"
                   enableLookups="true" redirectPort="8443"
                   acceptCount="10" debug="0"/>
        -->

        <!-- Engine 은 (Catalina 에서) 모든 요청을 처리하는 입력지점을 나타냅니다.
             Tomcat stand alone 용으로 구현된 Engine 은 요청에 포함된 HTTP 헤더를 분
             석하고, 적당한 Host (가상 호스트) 로 전달하는 역할을 합니다. -->

        <!-- 속성값
      defaultHost :: 디폴트 호스트명. 설정 파일에서는 정의되지 않았지만 이 서버 상에 있는 호스트명 중에서
      요청을 처리할 Host를 식별합니다. 이 이름은 반드시 바로 안에 중첩된 Host 엘리먼트 중
      하나의 name 속성과 일치해야 합니다.
      ※ 반드시 설정

      name :: 이 Engine의 논리적인 이름이며, 로그와 에러메시지에서 사용됩니다.
      ※ 반드시 설정

      className :: 사용할 구현체의 Java 클래스명.
      이 클래스는 반드시 org.apache.catalina.Engine를 구현해야 합니다.
      지정하지 않으면 표준값(아래에 정의됨)이 사용됩니다.
      
      jvmRoute :: 로드밸런싱 시나리오에서 세션유지를 위해서 반드시 사용해야 할 식별자.
      이 식별자는 클러스터에 참가하는 모든 Tomcat 4 서버에 대해 반드시 유일해야 합니다.
      생성되는 세션 식별자에는 이 식별자가 추가되어, 가장 앞단의 프록시가 특정 세션을
      항상 같은 Tomcat 4 인스턴스로 포워드 할 수 있게 합니다.
      
      debug :: 이 Engine이 해당 Logger 에 디버깅 로그를 출력하는 상세수준을 의미합니다.
      숫자가 높을 수록 더 자세한 출력을 생성합니다. 지정하지 않는 경우 디버깅 상세수준의 디폴트 값은 0 입니다.

     -->

        <!-- 컨테이너 구조에서 top level 컨테이너 설정하기 -->
        <Engine name="Standalone" defaultHost="localhost" debug="0">

          <!-- 요청 dumper 밸브는 Tomcat 의 인스턴스의 모든 요청을 받는 동안 들어온
               요청 헤더와 쿠키, 보내질 응답 헤더와 쿠키에 대해 유용한 디버깅 정보를
               덤프합니다. 만일 특정한 가상호스트, 또는 특정한 어플리케이션에 들어온
               요청에만 만 관심을 갖고자 한다면, 이 요소를 해당하는 <Host> 나 <Context>
               엔트리 아래에 위치시켜주십시오.

               모든 서블릿 2.3 컨테이너에 유동적인 유사한 동작구조를 위해서, 예제
               어플리케이션에 있는 "RequestDumperFilter" 필터를 확인하십시오.
               (소스는 "$CATALINA_HOME/webapps/examples/WEB-INF/classes/filters"
               위치에 있을 것입니다.)

               기본적으로 Request dumping 기능은 사용하지 않는 것으로 되어있습니다.
               다음의 요소에서 주석을 빼면 사용할 수 있습니다. -->
          <!--
          <Valve className="org.apache.catalina.valves.RequestDumperValve"/>
          -->

          <!-- 하위수준에서 지정되지 않았다면 사용되는 Global Logger -->
       <!--
        이 Engine에 대한 모든 로그 메시지를 받아서 처리할 로거(logger)를 설정합니다.
        이 로거는 이 Engine 외에도 이 Engine이 정의된 Service의 Connectors로부터의
        로그도 처리합니다. 또 이 로거는 하위에서 Logger 설정을 따로 하지 않는 경우,
        하위의 Host와 Context에서의 로그도 처리합니다.
      -->
          <Logger className="org.apache.catalina.logger.FileLogger"
                  prefix="catalina_log." suffix=".txt"
                  timestamp="true"/>

          <!-- 이 Realm 이 여기에 있기 때문에, 인스턴스는 전체적으로 공유됩니다. -->
       <!--
       영역(realm)을 설정하여, 사용자와 사용자의 역할을 저장할 데이터베이스를
       이 Engine에 포함된 모든 Host와 Context 에서 공유할 수 있도록 합니다.
       하위에서 Realm 설정이 정의되면 여기의 설정은 무시됩니다.
       -->
          <Realm className="org.apache.catalina.realm.MemoryRealm" />

          <!-- 데이터베이스에 저장되고 JDBC 를 통해서 접근하는 Realm 을 사용하려면
               위 Realm 을 다음의 Realm 중 하나와 대치하십시오. -->

          <!--
          <Realm  className="org.apache.catalina.realm.JDBCRealm" debug="99"
                 driverName="org.gjt.mm.mysql.Driver"
              connectionURL="jdbc:mysql://localhost/authority?user=test;password=test"
                  userTable="users" userNameCol="user_name" userCredCol="user_pass"
              userRoleTable="user_roles" roleNameCol="role_name" />
          -->

          <!--
          <Realm  className="org.apache.catalina.realm.JDBCRealm" debug="99"
                 driverName="oracle.jdbc.driver.OracleDriver"
              connectionURL="jdbc:oracle:thin:@ntserver:1521:ORCL?user=scott;password=tiger"
                  userTable="users" userNameCol="user_name" userCredCol="user_pass"
              userRoleTable="user_roles" roleNameCol="role_name" />
          -->

          <!--
          <Realm  className="org.apache.catalina.realm.JDBCRealm" debug="99"
                 driverName="sun.jdbc.odbc.JdbcOdbcDriver"
              connectionURL="jdbc:odbc:CATALINA"
                  userTable="users" userNameCol="user_name" userCredCol="user_pass"
              userRoleTable="user_roles" roleNameCol="role_name" />
          -->
      
       <!--
       웹서버를 운영할 때 일반적으로 생성되는 출력 파일중 하나가 액세스 로그(access log)입니다.
       이 로그는 서버가 처리하는 각 요청마다 표준 포맷에 따라 한 라인씩 출력합니다.
       Catalina에서는 Valve 구현을 통해, 웹서버들이 표준 포맷에 따라 생성하는 액세스 로그와 같은
       포맷의 로그를 생성할 수도 있고, 또는 다양한 커스텀 포맷으로 로그를 생성할 수 있도록 하고 있습니다.
       당신은 Catalina에 Engine, Host, 또는 Context가 처리하는 모든 요청에 대한 액세스 로그를 생성하도록
       지시할 수 있는데, 이는 다음과 같이 Valve 엘리먼트를 중첩시키면 됩니다:
     
      <Valve className="org.apache.catalina.valves.AccessLogValve"
             prefix="catalina_access_log." suffix=".txt"
             pattern="common"/>

       -->

          <!-- default virtual host 설정하기 -->
       <!-- 속성값
       appBase :: 이 가상호스트에 대한 어플케이션의 기준(Application Base) 디렉토리.
       이는 이 가상호스트에 배치될 웹어플리케이션 들을 가지고 있는 디렉토리의 패스명입니다.
       이 디렉토리의 절대경로명을 지정할 수도 있으며, 또는 $CATALINA_HOME 디렉토리에
       상대적인 경로명을 지정할 수도 있습니다.
       ※ 반드시 설정

       autoDeploy :: 이 플래그 값은 이 호스트의 웹어플리케이션 들은
       호스트 설정자(host configurator)에 의해 자동으로 배치(deploy)되어야 함을 나타냅니다.
       이 플래그의 디폴트값은 true 입니다. 

       className :: 사용할 구현체의 Java 클래스명.
       이 클래스는 반드시 org.apache.catalina.Host 인터페이스를 구현해야 합니다.
       지정하지 않으면 표준값(아래에 정의됨)이 사용될 것입니다.

       name :: 당신의 Domain Name Service 서버에 등록된 이 가상호스트의 네트워크 명칭.
       Engine에 포함된 Host 중 하나는 반드시 그 Engine의 defaultHost 세팅과 일치하는 이름을 가져야 합니다.
       ※ 반드시 설정

       debug :: 이 Host가 해당 로거에 디버깅 로그를 출력하는 상세수준을 의미합니다.
       숫자가 높을 수록 더 자세한 출력을 생성합니다. 지정하지 않으면, 디버깅 상세수준의 디폴트 값은 0 입니다

       deployXML :: Context XML 설정 파일을 사용하여 어플리케이션을 배치하는 기능을
       끄고 싶다면 false로 지정하십시오. 배치되는 어플리케이션 들은 Catalina의
       보안권한(security permissions)가 주어집니다. 만약 신뢰할 수 없는(untrusted)
       사용자가 웹어플리케이션에 접근가능한 상황이라면 보안상 false로 할 필요가 있습니다.
       디폴트 값은 true입니다.

       errorReportValveClass :: 이 Host가 사용할 오류보고밸브(error reporting valve)의
       Java 클래스명. 이 밸브의 임무는 에러보고를 출력하는 것입니다.
       이 속성을 설정하면 Tomcat이 생성하는 에러페이지의 외관(look)을 커스터마이즈 할 수
       있습니다. 이 클래스는 반드시 org.apache.catalina.Valve 인터페이스를 구현해야 합니다.
       아무것도 지정하지 않은 경우에는 org.apache.catalina.valves.ErrorReportValve가
       디폴트로 사용됩니다.

       liveDeploy :: Tomcat 운영 도중에 appBase 디렉토리에 새로운 웹어플리케이션을
       추가했을 경우, 이 플래그 값이 true이면 이 웹어플리케이션이 자동으로 배치됩니다.
       디폴트 값은 true입니다.

       unpackWARs :: 웹어플리케이션이 appBase 디렉토리에 웹어플리케이션 아카이브(WAR)
       파일로 존재할 때, WAR 파일을 해당 디스크 디렉토리 구조로 풀어서(unpack) 실행되길
       원하는 경우에는 true로 설정하십시오. false로 설정하면 WAR 파일형태로 직접 실행됩니다.

       workDir :: 이 Host에서 사용할 임시 디렉토리에 대한 경로명입니다.
       이 디렉토리는 관련 웹어플리케이션의 서블릿들이 임시로 읽기-쓰기 작업을 하는 용도로 사용합니다.
       웹어플리케이션의 서블릿들은 이름이 javax.servlet.context.tempdir인
       서블릿-컨텍스트 속성(타입은 java.io.File)을 통해 이 디렉토리를 볼 수 있으며,
       이 내용은 서블릿 스펙에 기술되어 있습니다. 지정하지 않은 경우에는 적절한 디렉토리가
       $CATALINA_HOME/work 아래에 제공됩니다.

       -->
          <Host name="localhost" debug="0" appBase="webapps" unpackWARs="true">
      <!--
       많은 서버 환경에서 네트워크 관리자들은 서버의 IP 주소로 해독(resolve) 되는 하나 이상의
       네트워크 명칭(Domain Name Service (DNS) 서버에 있는)을 설정하곤 합니다.
       보통 이런 네트워크 명칭은 conf/server.xml 에서 별도로 Host 엘리먼트로 설정됩니다.
       이 각각의 Host 엘리먼트는 자신만의 웹어플리케이션 집합을 가지게 됩니다.
       그러나 일부 환경에서는 둘 이상의 네트워크 명칭을 같은 가상호스트로 해독되어야
       좋은 경우가 있습니다. 이런 경우는 대개 기업의 웹사이트에서 많이 발견됩니다.
       즉 사용자가 www.mycompany.com를 써도 company.com를 써도, 정확히 같은 컨텐츠와
       어플리케이션에 액세스되어야 되는 경우입니다.
       이러한 경우에는 하나 또는 그 이상의 Alias 엘리먼트를 Host 엘리먼트 내에 포함시키면 됩니다.
       예를 들면:

       <Alias>mycompany.com</Alias>
      -->

            <!-- 보통, 사용자는 각각의 웹 어플리케이션에 인증을 해줘야만 합니다.
                 사용자가 security 제한에 걸려있는 보호된 자원 중에서 처음에 걸리는
                 인증을 한번만 통과하고, 이 가상호스트 안의 "모든" 웹어플리케이션에
                 통과된 인증으로 접근하게 하려면 아래 엔트리의 주석을 해제하십시오.
            -->
            <!--
            <Valve className="org.apache.catalina.authenticator.SingleSignOn"
                       debug="0"/>
            -->

            <!-- Access log는 이 가상호스트에 접속하는 모든 요청을 처리합니다. 기본값은
                 로그 파일은 $CATALINA_HOME 에 상대적인 "logs" 디렉토리에 생성됩니다.
                 "directory" 속성을 이용해서 원하는 다른 디렉토리로 지정할 수 있습니다.
                 ($CATALINA_HOME 에 대해) 상대적인 디렉토리나 또는 원하는 디렉토리의
                 절대 경로를 써주면 됩니다.
            -->
            <Valve className="org.apache.catalina.valves.AccessLogValve"
                     directory="logs"  prefix="localhost_access_log." suffix=".txt"
                     pattern="common"/>

            <!-- 이 가상 호스트에 관계된 모든 Context 에 의해 공유된 Logger. 기본값은
                 (FileLogger 를 사용할 때), 로그 파일들은 $CATALINA_HOME 에 상대적인
                 "logs" 디렉토리에 생성됩니다. "directory" 속성을 이용해서 원하는 다른
                 디렉토리로 지정할 수 있습니다. ($CATALINA_HOME 에 대해) 상대적인 디렉
                 토리나 또는 원하는 디렉토리의 절대 경로를 써주면 됩니다.
            -->
            <Logger className="org.apache.catalina.logger.FileLogger"
                     directory="logs"  prefix="localhost_log." suffix=".txt"
             timestamp="true"/>

            <!-- 각각의 웹 어플리케이션에 대한 프로퍼티 설정. 이것은 기본값과는 다른 프로
                 퍼티를 설정하기 윈할 때나, 웹어플리케이션 document 루트 디렉토리가 가상
                 호스트의 appBase 디렉토리와 다른 곳에 있을 경우에만 필요합니다.
            -->

     


            <!-- Tomcat Root Context -->
            <!--
              <Context path="" docBase="ROOT" debug="0"/>
            -->

            <!-- Tomcat Examples Context -->
      <!--
       Context 엘리먼트는 특정 가상호스트 내에서 실행되는 웹어플리케이션을 나타냅니다.
       각 웹어플리케이션은 웹어플리케이션 아카이브(Web Application Archive) (WAR) 파일 또는,
       패킹하지 않은 채로 그에 상응하는 내용을 담고 있는 디렉토리를 기준으로 하며,
       이러한 내용은 서블릿 스펙(버전 2.2 또는 그 이상)에 설명되어 있습니다.
       웹어플리케이션 아카이브에 관한 더 많은 정보를 원하시면 서블릿 스펙을 다운로드해서 참고하십시오.
       그리고 Tomcat 어플리케이션 개발자 가이드(Application Developer's Guide)를 검토하시기 바랍니다.

       각 HTTP 요청을 처리하는데 사용할 웹어플리케이션의 선택은, 각각 정의된 Context의 컨텍스트
       경로(context path)에 대해 요청 URI의 가능한 전치어(prefix) 중 가장 길게 매칭가능한 컨텍스트 경로를
       가진 컨텍스트를 선택함으로써 이루어집니다. 선택된 Context는 수신된 요청을 처리하기 위해 적절한
       서블릿을 선택합니다.
       서블릿 선택 작업은 웹어플리케이션 배치 디스크립터(web application deployment descriptor)
       파일(반드시 웹어플리케이션 디렉토리 하위의 /WEB-INF/web.xml에 위치함)에 정의된
       서블릿 매핑 정보에 따라서 이루어집니다.

       Context 엘리먼트는 횟수의 제한 없이 정의할 수 있으며, conf/server.xml의
       Host 엘리먼트 내에 중첩시키면 됩니다.  각각의 Context는 반드시 유일한 컨텍스트
       경로를 가져야 하며, 컨텍스트 경로는 path 속성으로 정의됩니다.
       또 컨텍스트 경로의 문자열 길이가 0인 Context를 추가로 지정해야 하는데,
       이렇게 정의한 Context는 이 가상 호스트에 대하여 default 웹어플리케이션이 되어,
       다른 어떤 Context의 컨텍스트 경로에도 매칭되지 않는 모든 요청을 처리하는데 사용됩니다.

       Context 엘리먼트를 Host 엘리먼트에 중첩시키는 방법 외에도, Host의 appBase로
       지정된 디렉토리 안에 이들을 각각의 파일(확장자는 ".xml")로 저장하는 방법이 있습니다.
       어플리케이션의 자동배치(Automatic Application Deployment)에서 더 자세한 정보를 볼 수 있습니다.

       명시적으로 Context 엘리먼트를 지정하는 방법 뿐만 아니라, 당신을 위해 자동으로
       Context 엘리먼트를 생성해 주는 몇가지 테크닉도 존재합니다.
       어플리케이션의 자동배치(Automatic Application Deployment)와
       사용자 웹어플리케이션(User Web Applications)에서 더 많은 정보를 볼 수 있습니다.

       이하의 설명에서는 $CATALINA_HOME 변수명을 사용하여 당신이 Tomcat 4를 설치한
       디렉토리를 참조하며, 이 디렉토리가 대부분의 상대경로에 대한 기준 디렉토리(base directory)가 됩니다.
       그러나 만약 CATALINA_BASE 디렉토리를 설정하여 Tomcat 4를 여러개 설치했다면,
       이러한 디렉토리 변수 참조에 대해 $CATALINA_HOME 대신 $CATALINA_BASE 를
       사용해야 합니다.

      -->

      <!-- 속성값
       docBase :: 이 웹어플리케이션에 대한 Document Base (Context Root로도
       알려져 있습니다) 디렉토리, 또는 웹어플리케이션 아카이브 파일의 경로명(웹어플리케이션을
       WAR 파일로 직접 실행하는 경우)을 나타냅니다. 이 디렉토리나 WAR 파일에에 대한
       절대경로명을 지정할 수도 있고, 이 Context가 정의된 Host의 appBase 디렉토리에 대한
       상대경로명을 지정할 수도 있습니다.
       ※반드시 설정
       
       path :: 이 웹어플리케이션의 컨텍스트 경로(context path)를 나타내며, 각 요청
       URI의 시작부분이 컨텍스트 경로와 같을 때 해당 웹어플리케이션이 그 요청을 처리하게 됩니다.
       하나의 특정 Host 내의 컨텍스트 경로들은 모두 각각 유일해야 합니다.
       만약 컨텍스트 경로를 빈 스트링("")으로 지정하면, 이 Context는 이 Host에 대한
       디폴트 웹어플리케이션으로 정의된 것입니다.
       디폴트 웹어플리케이션은 다른 Context 들에 해당되지 않는 모든 요청을 처리할 것입니다.
       ※반드시 설정

       className :: 사용할 Java 구현체 클래스의 이름.
       이 클래스는 반드시 org.apache.catalina.Context 인터페이스를 구현해야 합니다.
       지정하지 않으면 표준값 (아래에 정의됩니다)이 사용됩니다.

       cookies :: true(디폴트)로 지정하면 클라이언트가 쿠키를 지원하는 경우
       세션확인의 통신수단(session identifier communication)으로 쿠키를 사용합니다.
       false로 지정하면 세션확인의 통신수단으로 쿠키 사용을 하지 않고,
       어플리케이션에 의한 URL 다시쓰기(URL rewriting)에만 의존한다는 의미입니다.

       crossContext :: true로 지정하면 이 어플리케이션에서 ServletContext.getContext()
       호출을 통해, 이 가상호스트에서 실행중인 다른 웹어플리케이션에 대한
       요청디스패쳐(request dispatcher)를 성공적으로 얻을 수 있습니다.
       보안상의 이유로 false(디폴트)로 지정하면 getContext()는 언제나 null을 반환하게 됩니다.

       override :: 이 Context가 정의된 Host의 DefaultContext에 정의된 각 설정내용을,
       이 Context 엘리먼트에서 재정의(override) 할 수 있도록 하려면 true로 지정합니다.
       디폴트로는 DefaultContext 엘리먼트의 설정이 사용되도록 되어 있습니다.
       
       privileged :: true로 설정하면 이 컨텍스트는 관리자서블릿(manager servlet) 같은
       컨테이너 서블릿을 사용할 수 있습니다.    

       reloadable :: true로 지정하면, Catalina는 /WEB-INF/classes/와 /WEB-INF/lib 안
       클래스 들의 변경여부를 감시하다가, 변경이 발견되면 웹어플리케이션을 자동으로 재적재(reload)합니다.
       이 기능은 개발중에는 매우 유용하지만 얼마간의 실행부하(runtime overhead)가 발생하므로,
       실제 운영할 용도로 어플리케이션을 배치(deploy)할 때는 사용하지 않도록 합니다.
       그러나 이미 배치가 끝난 어플리케이션이라도 Manager 웹어플리케이션을 이용하면 필요할 때
       재적재 하도록 할 수 있습니다.

       wrapperClass :: 이 Context로 관리할 서블릿 들에 대해 사용할 org.apache.catalina.Wrapper 구현체
       클래스의 Java 클래스명입니다. 지정하지 않으면 표준값이 사용됩니다.

       useNaming :: 이 웹어플리케이션에서 Java2 Enterprise Edition (J2EE) 플랫폼 규약에 맞는
       JNDI InitialContext를 사용가능하게 하도록 설정하려면 true(디폴트값)로 지정합니다.

      -->
            <Context path="/examples" docBase="examples" debug="0"
                     reloadable="true">

        <!--
        이 Context에 대한 모든 로그 메시지를 받아서 처리할 로거(logger)를 설정합니다.
        이 로거는 ServletContext.log() 호출을 통해 기록될 어플리케이션 로그 메시지도 처리합니다.

        Logger 엘리먼트는, Catalina 컨테이너(Engine, Host, 또는 Context)의 로깅, 디버깅,
        그리고 에러메시지(스택 트레이스 포함)의 목적지(destination)를 나타냅니다.
        또한 어떤 Engine이나 Host와 연결된 Logger 들은 명시적으로 재설정하지 않으면
        자동적으로 하위의 컨테이너로부터 설정을 물려 받습니다.

        웹서버같이 액세스로그를 만드는데 관심이 있다면(가령 히트수 분석 소프트웨어를 돌리려고),
        그 Engine, Host, 또는 Context의 액세스로그 밸브(Access Log Valve) 컴포넌트 설정이 필요할 것입니다.


        -- 속성값 --

        className :: (반드시 설정) 사용할 Java 구현체 클래스의 이름.
        이 클래스는 반드시 org.apache.catalina.Logger 인터페이스를 구현해야 합니다.
        지정하지 않으면 표준값(아래에 정의됩니다)이 사용됩니다.
     
        verbosity :: 이 로거에 대한 상세수준(verbosity level).
        지정한 값보다 높은 상세수준의 메시지는 조용히 무시됩니다.
        가능한 값은 0 (중요 메시지만), 1 (에러), 2 (경고), 3 (정보), 그리고 4 (디버그) 입니다.
        지정하지 않은 경우 1 (에러) 입니다.

        NOTE - 명시적 상세수준을 가진 메시지만 이 값과 비교하여 로그여부를 결정합니다.
        명시적 상세수준이 없는 메시지는 무조건 로그됩니다.
     
        
        대부분의 Catalina 컴포넌트와는 달리 Logger의 경우에는, 사용할 수 있는
        표준 구현체가 여러개입니다. 따라서 사용하고자 하는 구현체를 반드시
        className 속성을 사용해서 지정해야 합니다.

        
        File Logger (org.apache.catalina.logger.FileLogger)
        File Logger는 한 지정된 디렉토리 안의 파일에 로그되는 메시지를 기록합니다.
        로그파일의 실제 파일명은 설정된 prefix, YYYY-MM-DD 포맷의 현재 날짜,
        그리고 설정된 suffix로 이루어집니다. 각 날의 자정을 지난 이후에 어떤 메시지가 로그되면,
        이 메시지가 발생하자마자 현재의 로그파일은 닫혀지고 새 로그파일이 새 날짜로 생성되어 열립니다.
        따라서 이런 로그파일의 전환 때문에 Catalina를 재부팅시킬 필요는 없습니다.

        
        File Logger가 지원하는 속성은 다음과 같습니다:

        directory :: 이 로거가 생성할 로그파일이 위치할 디렉토리의 절대/상대경로명.
        상대경로로 지정되면 $CATALINA_HOME을 기준으로 해석합니다.
        directory 속성을 지정하지 않으면 디폴트 값은 "logs"($CATALINA_HOME에 상대적임) 입니다.
        
        prefix  :: 각 로그파일명의 시작부분에 붙여질 prefix. 지정하지 않으면 "catalina."이 됩니다.
        아무 prefix도 붙이지 않으려면 길이가 0인 문자열("")을 사용하면 됩니다.
        
        suffix :: 각 로그파일명의 끝부분에 붙여질 suffix. 지정하지 않으면 ".log"가 됩니다.
        아무 suffix도 붙이지 않으려면 길이가 0인 문자열("")을 사용하면 됩니다.
        
        timestamp :: 모든 로그메시지에 날짜와 시간을 붙이려면 true로 지정하십시오.
        false(디폴트)로 지정하면 날짜와 시간은 찍히지 않습니다.
        

        Standard Error Logger (org.apache.catalina.logger.SystemErrLogger)
        Standard Error Logger는, Catalina의 표준 에러출력스트림으로 정해진 스트림으로 로그되는
        모든 메시지를 기록합니다. Catalina의 디폴트 기동 스크립트에서는 표준 에러출력스트림을
        $CATALINA_HOME 아래의 logs/catalina.out 파일로 지정해 놓습니다.
        이 로거에서 지원하는 추가 속성은 없습니다.

        Standard Output Logger (org.apache.catalina.logger.SystemOutLogger)
        Standard Output Logger는, Catalina의 표준 출력스트림으로 정해진 스트림으로 로그되는
        모든 메시지를 기록합니다. Catalina의 디폴트 기동 스크립트에서는 표준 출력스트림을
        $CATALINA_HOME 아래의 logs/catalina.out 파일로 지정해 놓습니다.
        이 로거에서 지원하는 추가 속성은 없습니다.


        -->
              <Logger className="org.apache.catalina.logger.FileLogger"
                         prefix="localhost_examples_log." suffix=".txt"
               timestamp="true"/>
              <Ejb   name="ejb/EmplRecord" type="Entity"
                     home="com.wombat.empl.EmployeeRecordHome"
                   remote="com.wombat.empl.EmployeeRecord"/>
              <!-- PersistentManager: 영속적인 세션을 테스트 하기위해서는 아래
                   섹션의 주석을 지워주십시오.
                            
                   saveOnRestart: true 값일 경우, Catalina 가 shutdown 될 때
                     모든 살아있는 세션들은 다른 세팅과는 상관없이, Store 에
                     저장될 것입니다. startup 할 때 Store 에 있는 모든 세션들
                     은 자동으로 로드됩니다. expiration 이 지난 세션들은 양쪽
                     의 경우에 무시됩니다.
                   maxActiveSessions: 0 이상의 값일 경우, 너무 많은 살아 있는 세
                     션이 있다면 몇몇은 없어져버리는 결과가 있을 수 있습니다.
                     minIdleSwap 은 이것을 제한합니다. -1 은 무한 세션을 허가한
                     다는 뜻입니다. 0 은 사용 후 세션은 거의 모두 없어져 버립니다
                     - 사용자들에게 인지될 정도로 느리게 될 것입니다.
                   minIdleSwap: 세션은 적어도 이기간 동안 idle 상태이어야 합니다.
                     (초 단위로) 없어지기 전에 말이죠.
                   maxActiveSessions. 이것은 사이트가 아주 활발할 때 thrashing 을
                     피하게 합니다. -1 이나 0 은 minimum 이 없다는 뜻입니다 - 세션
                     은 어느때라도 소멸될 수 있습니다.
                   maxIdleSwap: (초 단위로) 세션은 이 기간동안 idle 상태면 소멸됩
                     니다. minIdleSwap 이 보다 높다면, 그것으로 바꿔집니다.
                     이것은 정확하지 않습니다: 주기적으로 확인합니다.
                     -1 은 maxActiveSessions 값으로 인해 소멸되어야 해도, 세션은
                     소멸되지 않음을 의미합니다. 0 이상으로 세팅되면, startup 할 때
                     Store 에 있는 모든 세션은 로드될 것을 보장합니다.
                   maxIdleBackup: (Store 에 저장되었지만, active 메모리에 남아있는)
                     세션은 백업될 것입니다. 이 기간동안 idle 상태고, startup 할 때
                     Store 에 있는 모든 세션들이 로드될 것입니다. -1 로 설정되었다면
                     세션은 백업되지 않을 것이고, 0 은 사용된 뒤에 잠깐 백업된다는
                     것을 의미합니다.

                   Store 에 있는 세션을 지우려면, maxActiveSessions, maxIdleSwap,
                   minIdleBackup 모두를 -1 로, saveOnRestart 는 false로 세팅한 후,
                   Catalina 를 재시동합니다.
              -->
        <!--
              <Manager className="org.apache.catalina.session.PersistentManager"
                  debug="0"
                  saveOnRestart="true"
                  maxActiveSessions="-1"
                  minIdleSwap="-1"
                  maxIdleSwap="-1"
                  maxIdleBackup="-1">
                    <Store className="org.apache.catalina.session.FileStore"/>
              </Manager>
        -->
              <Environment name="maxExemptions" type="java.lang.Integer"
                          value="15"/>
              <Parameter name="context.param.name" value="context.param.value"
                         override="false"/>
              <Resource name="jdbc/EmployeeAppDb" auth="SERVLET"
                        type="javax.sql.DataSource"/>
              <ResourceParams name="jdbc/TestDB">
                <parameter><name>user</name><value>sa</value></parameter>
                <parameter><name>password</name><value></value></parameter>
                <parameter><name>driverClassName</name>
                  <value>org.hsql.jdbcDriver</value></parameter>
                <parameter><name>driverName</name>
                  <value>jdbc:HypersonicSQL:database</value></parameter>
              </ResourceParams>
              <Resource name="mail/Session" auth="Container"
                        type="javax.mail.Session"/>
              <ResourceParams name="mail/session">
                <parameter>
                  <name>mail.smtp.host</name>
                  <value>localhost</value>
                </parameter>
              </ResourceParams>
            </Context>

          </Host>

       <Host name="webmail.starit.net">
              <Context path="" docBase="/usr/local/tomcat/webapps/webmail" debug="0" reloadable="true">

       
       <!-- 자원정의 (Resource Definitions)
        웹어플리케이션 배치 디스크립터의 <resource-ref>와 <resource-env-ref> 엘리먼트의
        JNDI 탐색(lookup)에 대해 반환될 자원의 특성도 선언 가능합니다.
        그리고 어떤 자원에 대해서 객체팩토리를 사용하고(Tomcat이 아직 모르는 경우)
        그 객체팩토리를 설정하는데 사용할 프로퍼티를 설정하려면, 반드시 그 자원과 같은
        이름으로 자원 파라미터(Resource Parameters)를 추가로 정의해야 합니다.
       -->

       <!--
        예를 들어 다음과 같이 자원정의가 가능합니다:
      
         <Context ...>
          ...
          <Resource name="jdbc/EmployeeDB" auth="Container"
           type="javax.sql.DataSource"
          description="Employees Database for HR Applications"/>
          ...
        </Context>

        이것은 웹어플리케이션 배치 디스크립터(/WEB-INF/web.xml)에
        다음의 엘리먼트를 포함시킨 것과 동일합니다:

            <resource-ref>
          <description>Employees Database for HR Applications</description>
          <res-ref-name>jdbc/EmployeeDB</res-ref-name>
          <res-ref-type>javax.sql.DataSource</res-ref-type>
          <res-auth>Container</res-auth>
        </resource-ref>
       -->

       <!-- 속성값
        name :: (반드시설정) 생성할 자원의 이름. java:comp/env 컨텍스트에 대한 상대적인 이름입니다.

        type :: (반드시설정) 웹어플리케이션이 이 자원에 대해 탐색(lookup)을 실행할 때 기대하는 완전한 Java 클래스명.

        auth :: 해당 자원관리자에 인증(sign on)할 때, 웹어플리케이션 프로그램의 코드상에서 직접 할지,
        또는 컨테이너가 직접 어플리케이션의 행위(behalf)에 따라 할지를 지정합니다.
        이 속성의 값은 반드시 Application 또는 Container 중 하나여야 합니다.
        이 속성은, 웹어플리케이션이 웹어플리케이션 배치 디스크립터에서 <resource-ref> 엘리먼트를
        사용하는 경우에는 반드시 필요합니다.
        그러나 <resource-env-ref>를 대신 사용하는 경우에는 선택사항입니다.
        
        description :: (선택사항)이 자원에 대한 사람이 읽기 쉬운 간단한 설명
        
        scope :: 이 자원관리자를 통해 얻어진 연결(connection)의 공유를 허가할 것인지 지정합니다.
        이 속성의 값은 반드시 Shareable 또는 Unshareable 중 하나여야 합니다.
        지정하지 않으면 연결은 공유가능(shareable)이 됩니다.

       -->
       <!-- JNDI setting for jdbc -->
        <Resource name="jdbc/webmail" auth="Container"
           type="javax.sql.DataSource">
       </Resource>

       <!--
        사용할 자원 factory implementation 의 자바 클래스명과 자원 factory 를
        설정하는 데 사용되는 JavaBeans 프로퍼티를 설정합니다.

        이 엘리먼트는 웹어플리케이션에서 해당 자원의 이름에 대해 JNDI 탐색을 수행할 때,
        객체를 반환하는데 사용할 자원관리자(또는 객체팩토리)를 설정하는 역할을 합니다.
        $CATALINA_HOME/conf/server.xml의 <Context>나 <DefaultContext> 엘리먼트 내의
        <Resource> 엘리먼트로 지정된 모든 자원 이름, 그리고/또는 웹어플리케이션
        배치 디스크립터에서 <resource-ref> 나 <resource-env-ref> 엘리먼트에서
        선언된 모든 자원 이름에 대해서는 반드시 자원 파라미터(resource parameters)를
        정의해야 그 자원에 성공적으로 액세스할 수 있습니다.

        자원 파라미터는 이름으로 정의되며, 정확하게 어떤 파라미터 이름들의 집합을 지원하는가는
        당신이 사용하고 있는 자원관리자(또는 객체팩토리)에 따라 달라집니다.
        즉 해당 팩토리 클래스의 JavaBeans 프로퍼티 중 설정가능한(settable) 프로퍼티의 이름과
        일치해야 합니다. JNDI 구현체는 지정한 팩토리 클래스의 인스턴스에 대해 JavaBeans의
        모든 해당 속성 설정메소드를 호출함으로써 모든 설정을 마친 다음에야,
        이 팩토리 인스턴스를 JNDI lookup() 호출을 통해 사용가능하도록 할 것입니다.

        만약 특정 자원 타입에 대해 팩토리 클래스의 Java 클래스명을 지정할 필요가 있다면,
        <ResourceParams> 엘리먼트 내의 <parameter> 항목에 factory라는 이름을 사용하면 됩니다.

       -->

       <!-- 속성값
        name :: 설정할 자원의 이름이며, java:comp/env 컨텍스트에 대한 상대적인 이름이 됩니다.
        이 이름은 $CATALINA_HOME/conf/server.xml 내에 <Resource> 엘리먼트로 정의된 자원,
        그리고/또는 웹어플리케이션 배치 디스크립터 내에 <resource-ref> 또는 <resource-env-ref>로
        참조되는 자원의 이름과 반드시 일치해야 합니다.
        ※ 반드시 설정
       -->
       <ResourceParams name="jdbc/webmail">
         <parameter>
        <name>factory</name>
        <value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
         </parameter>

       <!-- maximum nuber of DB connections in DB 0 for no limit -->
         <parameter>
        <name>maxActive</name>
        <value>100</value>
         </parameter>

       <!-- set 0 for no limit -->
         <parameter>
        <name>maxIdle</name>
        <value>30</value>
         </parameter>

         <parameter>
        <name>maxWait</name>
        <value>10000</value>
         </parameter>

         <parameter>
        <name>username</name>
        <value>staritadm</value>
         </parameter>

         <parameter>
        <name>password</name>
        <value>pe999</value>
         </parameter>

         <parameter>
        <name>driverClassName</name>
        <value>org.gjt.mm.mysql.Driver</value>
         </parameter>

         <parameter>
        <name>url</name>
        <value>jdbc:mysql://localhost:3306/webmail?autoReconnect=true</value>
         </parameter>
       </ResourceParams>

       <!--
        이 엘리먼트는 어떤 전역 JNDI 자원으로의 링크를 생성하는데 사용합니다.
        그 연결명에 대하여 JNDI 탐색을 실행하면 링크된 전역자원이 반환됩니다.
       -->

       <!-- 속성값
        name :: 생성할 자원링크의 이름이며, java:comp/env에 대한 상대적인 이름입니다.
        ※ 반드시 설정
        
        global :: 전역 JNDI 컨텍스트내의 링크된 전역자원의 이름.
        ※ 반드시 설정

        type ::  이 자원링크에 대해 탐색을 실행할 때 웹어플리케이션이 기대하는 완전한 Java 클래스명.
        ※ 반드시 설정

       -->
       <ResourceLink name="linkToGlobalResource" global="simpleValue" type="java.lang.Integer"/>

     

       <!-- 컨텍스트 파라미터 (Context Parameter)
        이 엘리먼트 안에 <Parameter> 엘리먼트 들을 중첩시키면, 웹어플리케이션에서
        서블릿-컨텍스트 초기화 파라미터(servlet context initialization parameters)로
        이용가능한 파라미터이름-값 들을 설정할 수 있습니다.
        
        예를 들어 다음과 같이 하면 초기화 파라미터를 생성할 수 있습니다:
        
        <Context ...>
          ...
          <Parameter name="companyName" value="My Company, Incorporated"
           override="false"/>
          ...
        </Context>

        
        이는 웹어플리케이션 배치 디스크립터(/WEB-INF/web.xml) 안에
        다음과 같은 엘리먼트를 포함시키는 것과 동일합니다:
          
         <context-param>
          <param-name>companyName</param-name>
          <param-value>My Company, Incorporated</param-value>
        </context-param>
        
        
        -- 속성값 --

        name :: (반드시 설정) 생성할 컨텍스트 초기화 파라미터의 이름.

        value :: (반드시 설정) 웹어플리케이션에서 ServletContext.getInitParameter()을
        호출할 때 반환할 파라미터 값.

        override :: 웹어플리케이션 배치 디스크립터에서 여기에서 지정한 초기화 파라미터와
        같은 이름의 <context-param>를 지정했을 때 그 파라미터 값의 덮어쓰기(override)를
        허용하지 않으려면 false로 설정합니다. 디폴트값은 true입니다.

        description :: 이 컨텍스트 초기화 파라미터에 대한 간략한 설명이며, 생략가능
       -->
       


       <!-- 환경항목(Environment Entries)
        
        웹어플리케이션에서 환경항목자원(environment entry resources)으로 사용할 수
        있도록 항목의 이름-값 들을 설정할 수 있습니다. 이 설정은 <Environment> 항목을
        이 엘리먼트 내에 중첩시키면 됩니다. 예를 들어 아래와 같이 환경항목을 생성할 수 있습니다:

            <Context ...>
          ...
          <Environment name="maxExemptions" value="10"
           type="java.lang.Integer" override="false"/>
          ...
        </Context>
         

        이는 웹어플리케이션 배치 디스크립터(/WEB-INF/web.xml)에서
        다음의 엘리먼트를 포함시킨 것과 동일합니다:
          
         <env-entry>
          <env-entry-name>maxExemptions</param-name>
          <env-entry-value>10</env-entry-value>
          <env-entry-type>java.lang.Integer</env-entry-type>
        </env-entry>

         
        그러나 이 값을 커스터마이즈하기 위해 배치 디스크립터를 변경할 필요는 없습니다.

        
        <Environment> 엘리먼트에서는 다음과 같은 속성들을 사용할 수 있습니다:
        
        description :: (선택사항)이 환경항목에 대한 사람이 읽기 쉬운 간단한 설명
        
        name :: (반드시 설정) 생성할 환경항목의 이름. java:comp/env 컨텍스트에 대한 상대적인 이름입니다.
        
        override :: 웹어플리케이션 배치 디스크립터에서 <env-entry>으로 같은 이름의
        환경항목을 지정하는 경우, 여기에서 지정한 값을 덮어쓰기(override) 하지 않도록
        하고 싶으면 false로 지정합니다. 이 값을 지정하지 않으면 덮어쓰기가 허용됩니다.
        
        type :: (반드시 설정) 이 환경항목에 대해 웹어플리케이션이 예상하는 완전한(fully qualified) Java 클래스명.
        반드시 웹어플리케이션 배치 디스크립터의 <env-entry-type>의 규칙에 맞는 값이어야 합니다.
        그 규칙에 맞는 값 들은: java.lang.Boolean,
                java.lang.Byte,
                java.lang.Character,
                java.lang.Double,
                java.lang.Float,
                java.lang.Integer,
                java.lang.Long,
                java.lang.Short,
                java.lang.String 입니다.
        
        value :: (반드시 설정) 웹어플리케이션이 JNDI 컨텍스트로부터 요청해서 반환 받을 환경항목의 값.
        이 값은 반드시 위의 type에 정의된 Java type으로 변환 가능해야 합니다.
        
       -->
       </Context>
     </Host>

        </Engine>

      </Service>

      <!-- MOD_WEBAPP 커넥터는 apache 1.3 과 서블릿 컨테이너로 Tomcat 4.0 을 연결하는
           데 쓰입니다. WebApp 모듈 배포판에 포함된 어떻게 만드는지에 대해 설명하는
           README.txt 파일을 읽어보십시오. (또는 "jakarta-tomcat-connectors/webapp"
           CVS repository 를 확인해 보십시오.)

           Apache 쪽에서 설정하려면, 먼저 "httpd.conf" 에 설정되어진 "ServerName" 과
           "Port" 지시자를 확인해야 합니다. 그리고, "httpd.conf" 파일 아래에 다음과
           같은 줄을 넣어줍니다:

             LoadModule webapp_module libexec/mod_webapp.so
             WebAppConnection warpConnection warp localhost:8008
             WebAppDeploy examples warpConnection /examples/

           이 후에 (필요하다면 Tomcat 을 재시동한 후) Apache 를 재시작하면 연결이 됩니
           다. Apache 를 통해서 "WebAppDeploy" 지시자에 있는 모든 어플리케이션들이 실
           행하는 것을 보실 수 있습니다.
      -->

      <!-- Apache-Connector Service 설정하기 -->
      <Service name="Tomcat-Apache">

        <Connector className="org.apache.catalina.connector.warp.WarpConnector"
         port="8008" minProcessors="5" maxProcessors="75"
         enableLookups="true"
         acceptCount="10" debug="0"/>

        <!-- "localhost" 를 Apache "ServerName" 에 설정된 값으로 대치해주십시오 -->
        <Engine className="org.apache.catalina.connector.warp.WarpEngine"
         name="Apache" debug="0" appBase="webapps">

          <!-- 하위 레벨에서 설정되지 않았다면 Global logger -->
          <Logger className="org.apache.catalina.logger.FileLogger"
                  prefix="apache_log." suffix=".txt"
                  timestamp="true"/>

          <!-- 이 Realm 이 여기 있기 때문에, 전체적으로 이 Realm 이 공유됩니다. -->
          <Realm className="org.apache.catalina.realm.MemoryRealm" />

        </Engine>

      </Service>

    </Server>

     

    <!-- Context 컴포넌트내에서만 정의가 가능한 Loader

    Loader 엘리먼트는 웹애플리케이션에 필요한 Java 클래스와 자원을 적재하는데 사용할
    웹애플리케이션 클래스로더를 나타냅니다. 이 클래스로더는 반드시 서블릿 스펙의 요구사항을
    반드시 따라야 하며, 아래와 같은 위치로부터 클래스들을 적재합니다:

    웹애플리케이션 내 /WEB-INF/classes 디렉토리에서.
    웹애플리케이션 내 /WEB-INF/lib 디렉토리의 JAR 파일들로부터.
    모든 웹애플리케이션이 전역적으로 이용가능하도록 Catalina가 허용한 자원들로부터.

    Loader 엘리먼트는 Context 컴포넌트 내에서만 정의가 가능하지만, 생략할 수도 있습니다.
    만약 생략한다면, 디폴트 Loader 설정이 자동으로 생성되며, 대부분의 경우 이 Loader로 충분합니다.

    Catalina에서 구현된 클래스로더 계층구조에 대해 더 깊이 알고 싶다면 FIXME - Reference를 참고하십시오.


    -- 속성값 --

    className :: 사용할 Java 구현체 클래스의 이름.
    이 클래스는 반드시 org.apache.catalina.Loader 인터페이스를 구현해야 합니다.
    지정하지 않으면 표준값(아래에 정의됩니다)이 사용됩니다.
     
    delegate :: 이 클래스로더가 표준 Java2 위임모델을 따르게 하고 싶다면 true로 지정합니다.
    즉 이렇게 지정하면, 클래스를 적재할 때 웹애플리케이션 내부를 검색하기 전에 먼저
    부모 클래스로더에서 클래스를 찾으려 시도합니다. false(디폴트)로 지정하면 요청된 클래스나
    자원을 찾을 때 부모 클래스로더에 묻기 전에 웹애플리케이션 내부를 먼저 검색합니다.
     
    reloadable :: true로 지정하면, Catalina는 /WEB-INF/classes/와 /WEB-INF/lib 안
    클래스 들의 변경여부를 감시하다가, 변경이 발견되면 웹애플리케이션을 자동으로 재적재합니다.
    이 기능은 개발중에는 매우 유용하지만 상당한 실행부하가 발생하므로, 실제 운영할 용도로
    애플리케이션을 배치(deploy)할 때는 사용하지 않도록 합니다.
    그러나 이미 배치가 끝난 애플리케이션이라도 Manager 웹애플리케이션을 이용하면
    필요할 때 재적재 하도록 할 수 있습니다.

    NOTE - 이 프로퍼티에 대한 값은 이 Loader 엘리먼트가 정의된 Context 컴포넌트에
    설정된 reloadable 속성값을 물려받습니다만,
    Loader에 이 reloadable을 정의하면 Context의 값은 무시됩니다.
     
     
    Standard Implementation
    Loader의 표준구현체 클래스는 org.apache.catalina.loader.WebappLoader 입니다.
    이 클래스는 위에 나열한 공통속성 외에도 다음과 같은 추가적인 속성을 제공합니다:

    checkInterval :: 클래스와 자원의 변경을 확인할 시간간격을 초단위로 나타냅니다.
    이 값은 reloadable이 true인 경우에만 의미를 갖습니다. 지정하지 않으면 15초로 설정됩니다.
     
    debug :: 이 Engine이 해당 Logger에 디버깅 로그를 출력하는 상세수준을 의미합니다.
    숫자가 높을 수록 더 자세한 출력을 생성합니다. 지정하지 않으면 0으로 설정됩니다.
     
    loaderClass :: 사용할 java.lang.ClassLoader 구현체 클래스의 Java 클래스명입니다.
    지정하지 않으면 org.apache.catalina.loader.WebappClassLoader로 설정됩니다.
     
    workDir :: 이 Context에서 사용할 임시 디렉토리에 대한 경로명입니다.
    이 디렉토리는 관련 웹어플리케이션의 서블릿들이 임시로 읽기-쓰기 작업을 하는 용도로 사용합니다.
    웹어플리케이션의 서블릿 들은 이름이 javax.servlet.context.tempdir인 서블릿-컨텍스트
    속성(타입은 java.io.File)을 통해 이 디렉토리를 볼 수 있으며, 이 내용은 서블릿 스펙에
    기술되어 있습니다. 지정하지 않은 경우에는 적절한 디렉토리가
    $CATALINA_HOME/work 아래에 제공됩니다.

    -->

    'web' 카테고리의 다른 글

    [펌] Axis Webservice 설치및 테스트  (0) 2005.09.03
    [펌] web.xml 사용법  (0) 2005.07.23
    Tomcat 4.1.12 버전에서 서블릿 접근  (0) 2005.02.08
    web.xml 설명.  (0) 2005.02.04
    web.xml  (0) 2005.02.04
    Posted by '김용환'
    ,

    web.xml

    web 2005. 2. 4. 06:41

    web.xml이란


    Deployment Descriptor로 각 어플리케이션의 환경을 설정하는 부분을 담당한다. WAR 파일이 패키지 될 때 같이 포함되며 root directory 밑에 /WEB-INF 디렉토리에 위치한다.

    by kkaok
    2003-05-12

     

    web.xml 의 구조

    xml 정의와 schema 선언

    <?xml version="1.0" encoding="ISO-8859-1"?>
    <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
        "http://java.sun.com/dtd/web-app_2_3.dtd>
    위 스키마는 sun 사에서 미리 정의된것이다.

     

    웹 어플리케이션의 환경 설정

    <web-app>
        <servlet>
          <servlet-name>사용되는 클래스명</servlet-name>
          <servlet-class>클래스 경로</servlet-class>
        </servlet>
        <mime-mapping>
          <extension>txt</extension>
          <mime-type>text/plain</mime-type>
        </mime-mapping>
        <welcome-file-list>
          <welcome-file>기본 파일 경로</welcome-file>
          <welcome-file>두번째 시작하는 파일 경로</welcome-file>
        </welcome-file-list>
        <taglib>
          <taglib-uri>태그라이브러리</taglib-uri>
          <taglib-location>경로</taglib-location>
        </taglib>
    </web-app>

     

    web.xml은 xml파일이다. 따라서 xml 작성과 동일한 규칙이 적용된다.
    환경설정은 <web-app>으로 시작하고 </web-app>로 끝난다. 그외 삽입되는 요소로는 다음과 같다.

    .ServletContext Init Parameters
    .Session Configuration
    .Servlet/JSP Definitions
    .Servlet/JSP Mappings
    .Mime Type Mappings
    .Welcom File list
    .Error Pages

     

    web.xml의 elements의 순서
    각 element의 순서는 아래 순서에 따른다.

    <icon?>,
    <display-name?>,
    <description?>,
    <distributable?>,
    <context-param*>,
    <filter*>,
    <filter-mapping*>,
    <listener*>,
    <servlet*>,
    <servlet-mapping*>,
    <session-config?>,
    <mime-mapping*>,
    <welcome-file-list?>,
    <error-page*>,
    <taglib*>,
    <resource-env-ref*>,
    <resource-ref*>,
    <security-constraint*>,
    <login-config?>,
    <security-role*>,
    <env-entry*>,
    <ejb-ref*>,
    <ejb-local-ref*>


    자주 쓰이는 elements 예제

    <?xml version="1.0" encoding="ISO-8859-1"?>
    <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
        "http://java.sun.com/dtd/web-app_2_3.dtd>

    <web-app>
        <display-name>어플리케이션 이름</display-name>
        <description>어플리케이션 설명</desccription>
        <!-- 서블릿 매핑 : 보안과 주소를 간략화 하기 위해 사용
            http://localhost/servlet/KCount 이렇게 사용가능  -->
        <servlet>
          <servlet-name>KCount</servlet-name>
          <servlet-class>kr.pe.kkaok.mycount.KCount</servlet-class>
        </servlet>
        <!-- load-on-startup 옵션은 서버 구동시 자동으로 시작 되도록 하는 것이다. -->
        <servlet>
          <servlet-name>PoolManager</servlet-name>
          <servlet-class>kr.pe.kkaok.jdbc.PoolManager</servlet-class>
          <load-on-startup>1</load-on-startup>
        </servlet>
        <!-- 서블릿 매핑 : 위에서 servlet 부분을 삭제한다.
            http://localhost/KCount 이렇게 사용가능  -->
        <servlet-mapping>
          <servlet-name>KCount</servlet-name>
          <url-pattern>/KCount</url-pattern>
        </servlet-mapping>
        <!-- /servlet/* 과 동일한 패턴의 요청이 들어오면 servlet으로 처리 -->
        <servlet-mapping>
          <servlet-name>invoker</servlet-name>
          <url-pattern>/servlet/*</url-pattern>
        </servlet-mapping>
        <!-- 세션 기간 설정 -->
        <session-config>
          <session-timeout>
            30
          </session-timeout>
        </session-config>
        <!-- mime 매핑 -->
        <mime-mapping>
          <extension>txt</extension>
          <mime-type>text/plain</mime-type>
        </mime-mapping>
        <!-- 시작페이지 설정 -->
        <welcome-file-list>
          <welcome-file>index.jsp</welcome-file>
          <welcome-file>index.html</welcome-file>
        </welcome-file-list>
        <!-- 존재하지 않는 페이지, 404에러시 처리 페이지 설정 -->
        <error-page>
          <error-code>404</error-code>
          <location>/error.jsp</location>
        </error-page>
        <!-- 태그 라이브러리 설정 -->
        <taglib>
          <taglib-uri>taglibs</taglib-uri>
          <taglib-location>/WEB-INF/taglibs-cache.tld</taglib-location>
        </taglib>
        <!-- resource 설정 -->
     <resource-ref>
          <res-ref-name>jdbc/jack1972</res-ref-name>
          <res-type>javax.sql.DataSource</res-type>
          <res-auth>Container</res-auth>
        </resource-ref>
    </web-app>

     

    * 만약 톰캣 4에서 servelt에 접근이 안되는 경우
    아래는 okjsp.pe.kr 운영자 kenu님의 처리 방법이다.

    invoker 서블릿의 매핑이 보안문제로 막혀있어서 발생하는 문제로 $CATALINA_HOME/conf/web.xml를 열고 해당 부분의 주석을 제거한다.

    <!-- The mapping for the invoker servlet -->
    <servlet-mapping>
      <servlet-name>invoker</servlet-name>
      <url-pattern>/servlet/*</url-pattern>
    </servlet-mapping>

    security-constraint 엘리먼트를 $CATALINA_HOME/conf/web.xml 파일의 welcome-file-list 엘리먼트 아래쪽 <web-app> 에 중첩되게 복사합니다.

    <welcome-file-list>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.htm</welcome-file>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>
     
    <security-constraint>
      <display-name>Default Servlet</display-name>
      <!-- Disable direct alls on the Default Servlet -->
      <web-resource-collection>
        <web-resource-name>Disallowed Location</web-resource-name>
        <url-pattern>/servlet/org.apache.catalina.servlets.DefaultServlet/*</url-pattern>
        <http-method>DELETE</http-method>
        <http-method>GET</http-method>
        <http-method>POST</http-method>
        <http-method>PUT</http-method>
      </web-resource-collection>
      <auth-constraint>  
        <role-name></role-name>
      </auth-constraint>
    </security-constraint>

                            
    톰캣을 재시동하고 테스트해보면 정상적으로 작동하는걸 확인할 수 있다.

                             

     

    http://www.kkaok.pe.kr

    'web' 카테고리의 다른 글

    [펌] Axis Webservice 설치및 테스트  (0) 2005.09.03
    [펌] web.xml 사용법  (0) 2005.07.23
    Tomcat 4.1.12 버전에서 서블릿 접근  (0) 2005.02.08
    web.xml 설명.  (0) 2005.02.04
    server.xml  (0) 2005.02.04
    Posted by '김용환'
    ,

    from : http://www.javaworld.com/javaworld/jw-01-2002/jw-0104-java101.html

    Trash talk, Part 2

    The Reference Objects API allows programs to interact with the garbage collector

    Summary
    This month, Jeff Friesen explores the Reference Objects API, an API that allows your programs to interact with the garbage collector in limited ways. He shows you how to use that API to manage image caches, obtain notification when significant objects are no longer strongly reachable, and perform post-finalization cleanup.

    For answers to last month's homework, for this month's homework, and for additional material related to this article, visit the associated study guide. (3,700 words; January 4, 2002)

    By Jeff Friesen


    Printer-friendly version
    Printer-friendly version | Send this article to a friend Mail this to a friend


    Advertisement

    Java's garbage collection features tend to confuse new developers. I wrote this two-part series on garbage collection to dispel that confusion. Part 1 introduced you to garbage collection, explored various garbage collection algorithms, showed you how to request that Java run the garbage collector, explained the purpose behind finalization, and mentioned resurrection -- a technique for bringing objects back from the dead. Part 2 explores the Reference Objects API.

    Read the whole series on garbage collection:

    As you learned in Part 1, Java's garbage collector destroys objects. Although you typically write programs that ignore the garbage collector, situations arise in which a program needs to interact with the garbage collector.

    For example, suppose you plan to write a Java-based Web browser program similar to Netscape Navigator or Internet Explorer. When it comes to displaying Webpage images, your first thought is for the browser to always download all images before displaying them to a user. However, you soon realize that the user will spend too much time waiting for images to download. Although a user might be willing to wait when visiting a Webpage for the first time, the user would probably not tolerate waiting each time he revisits the Webpage. To decrease the user's wait time, you can design the browser program to support an image cache, which allows the browser to save each image after the download completes in an object on the object heap. The next time the user visits the Webpage in the same browsing session, the browser can retrieve the corresponding image objects from the object heap and quickly display those images to the user.

    Note
    To keep the discussion simple, I don't discuss a second-level disk-based image cache mechanism. Browsers like Netscape Navigator and Internet Explorer use this mechanism.

    The image cache idea features a problem -- insufficient heap memory. When the user visits numerous Webpages with different sized images, the browser must store all images in heap memory. At some point, the heap memory will decrease to a level where no more room exists for images. What does the browser do? By taking advantage of the Reference Objects API, the browser allows the garbage collector to remove images when the JVM needs additional heap space. In turn, when the browser needs to redraw an image, the garbage collector tells the browser if that image is no longer in memory. If the image is not in memory, the browser must first reload that image. The browser can then restore that image to the image cache -- although the garbage collector might need to remove another image from the cache to make heap memory available for the original image, assuming the object heap's free memory is low.

    In addition to teaching you how to use the Reference Objects API to manage an image cache, this article teaches you how to use that API to obtain notification when significant objects are no longer strongly reachable and perform post-finalization cleanup. But first, we must investigate object states and the Reference Objects API class hierarchy.

    Object states and the Reference Objects API class hierarchy
    Prior to the release of Java 2 Platform, Standard Edition (J2SE) 1.2, an object could be in only one of three states: reachable, resurrectable, or unreachable:

    • An object is reachable if the garbage collector can trace a path from a root-set variable to that object. When the JVM creates an object, that object stays initially reachable as long as a program maintains at least one reference to the object. Assigning null to an object reference variable reduces the object's references by one. For example:

      Employee e = new Employee (); Employee e2 = e; e = null;

      In the above code fragment, the Employee object is initially reachable through e. Then it is reachable through e2 as well as through e. After null assigns to e, the object is only reachable through e2.

    • An object is resurrectable if it is currently unreachable through root-set variables, but has the potential to be made reachable through a garbage collector call to that object's overridden finalize() method. Because finalize()'s code can make the object reachable, the garbage collector must retrace all paths from root-set variables in an attempt to locate the object after finalize() returns. If the garbage collector cannot find a path to the object, it makes the object unreachable. If a path does exist, the garbage collector makes the object reachable. If the object is made reachable, the garbage collector will not run its finalize() method a second time when no more references to that object exist. Instead, the garbage collector makes that object unreachable.

    • An object is unreachable when no path from root-set variables to that object exists and when the garbage collector cannot call that object's finalize() method. The garbage collector is free to reclaim the object's memory from the heap.

    With the release of J2SE 1.2, three new object states representing progressively weaker forms of reachability became available to Java: softly reachable, weakly reachable, and phantomly reachable. Subsequent sections explore each of those states.

    Note
    Also with the J2SE 1.2 release, the state previously known as reachable became known as strongly reachable. For example, in code fragment Employee e = new Employee ();, the Employee object reference in root-set variable e (assuming e is a local variable) is strongly reachable through e.

    The new object states became available to Java through reference objects. A reference object encapsulates a reference to another object, a referent. Furthermore, the reference object is a class instance that subclasses the abstract Reference class in the Reference Objects API -- a class collection in package java.lang.ref. Figure 1 presents a hierarchy of reference object classes that constitute much of the Reference Objects API.


    Figure 1. A hierarchy of reference object classes composes much of the Reference Objects API

    Figure 1's class hierarchy shows a class named Reference at the top and SoftReference, WeakReference, and PhantomReference classes below. The abstract Reference class defines those operations common to the other three classes. Those operations include:

    • Clear the current reference object

    • Add the current reference object to the currently registered reference queue

    • Return the current reference object's referent

    • Determine if the garbage collector has placed the current reference object on a reference queue

    The aforementioned operations introduce a reference queue. What are reference queues, and why are they part of the Reference Objects API? I'll answer both questions during our exploration of soft references.

    Soft references
    The softly reachable state manifests itself in Java through the SoftReference class. When you initialize a SoftReference object, you store a reference to a referent in that object. The object contains a soft reference to the referent, and the referent is softly reachable if there are no other references, apart from soft references, to that referent. If heap memory is running low, the garbage collector can find the oldest softly reachable objects and clear their soft references -- by calling SoftReference's inherited clear() method. Assuming there are no other references to those referents, the referents enter the resurrectable state (if they contain overridden finalize() methods) or the unreachable state (if they lack overridden finalize() methods). Assuming the referents enter the resurrectable state, the garbage collector calls their finalize() methods. If those methods do not make the referents reachable, the referents become unreachable. The garbage collector can then reclaim their memory.

    To create a SoftReference object, pass a reference to a referent in one of two constructors. For example, the following code fragment uses the SoftReference(Object referent) constructor to create a SoftReference object, which encapsulates an Employee referent:

    SoftReference sr = new SoftReference (new Employee ());

    Figure 2 shows the resulting object structure.


    Figure 2. A SoftReference object and its Employee referent

    According to Figure 2, the SoftReference object is strongly reachable through root-set variable sr. Also, the Employee object is softly reachable from the soft reference field inside SoftReference.

    You often use soft references to implement image and other memory-sensitive caches. You can create an image cache by using the SoftReference and java.awt.Image classes. Image subclass objects allow images to load into memory. As you probably know, images can consume lots of memory, especially if they have large horizontal and vertical pixel dimensions and many colors. If you kept all such images in memory, the object heap would quickly fill up, and your program would grind to a halt. However, if you maintain soft references to Image subclass objects, your program can arrange for the garbage collector to notify you when it clears an Image subclass object's soft reference and moves it to the resurrectable state -- assuming no other references to Image exist. Eventually, assuming the Image subclass object lacks a finalize() method with code that resurrects the image, Image will transition to the unreachable state, and the garbage collector will reclaim its memory.

    By calling SoftReference's inherited get() method, you can determine if an Image subclass object is still softly referenced or if the garbage collector has cleared that reference. get() returns null when the soft reference clears. Given the preceding knowledge, the following code fragment shows how to implement an image cache for a single Image subclass object:

    SoftReference sr = null;

    // ... Sometime later in a drawing method.

    Image im = (sr == null) ? null : (Image) (sr.get());

    if (im == null)
    {
        im = getImage (getCodeBase(), "truck1.gif");
        sr = new SoftReference (im);
    }

    // Draw the image.

    // Later, clear the strong reference to the Image subclass object.
    // That is done, so -- assuming no other strong reference exists --
    // the only reference to the Image subclass object is a soft
    // reference. Eventually, when the garbage collector notes that it
    // is running out of heap memory, it can clear that soft reference
    // (and eventually remove the object).

    im = null;

    The code fragment's caching mechanism works as follows: To begin, there is no SoftReference object. As a result, null assigns to im. Because im contains null, control passes to the getImage() method, which loads truck1.gif. Next, the code creates a SoftReference object. As a result, there is both a strong reference (via im) and a soft reference (via sr) to the Image subclass object. After the code draws the image, null assigns to im. Now there is only a single soft reference to Image. If the garbage collector notices that free memory is low, it can clear Image's soft reference in the SoftReference object that sr strongly references.

    Suppose the garbage collector clears the soft reference. The next time the code fragment must draw the image, it discovers that sr lacks null and calls sr.get () to retrieve a strong reference to Image -- the referent. Assuming the soft reference is now null, get() returns null, and null assigns to im. We can now reload the image by calling getImage() -- a relatively slow process. However, if the garbage collector did not clear the soft reference, sr.get() would return a reference to the Image subclass object. Then we could immediately draw that image without first loading it. And that is how a soft reference allows us to cache an image.

    The previous code fragment called sr.get() to learn whether or not the garbage collector cleared the sr-referenced object's internal soft reference to an Image subclass object. However, a program can also request notification by using a reference queue -- a data structure that holds references to Reference subclass objects. Under garbage collector (or even program) control, Reference subclass object references arrive at the end of the reference queue and exit from that queue's front. As a reference exits from the front, the following reference moves to the front, and other references move forward. Think of a reference queue as a line of people waiting to see a bank teller.

    To use a reference queue, a program first creates an object from the ReferenceQueue class (located in the java.lang.ref package). The program then calls the SoftReference(Object referent, ReferenceQueue q) constructor to associate a SoftReference object with the ReferenceQueue object that q references, as the following code fragment demonstrates:

    ReferenceQueue q = new ReferenceQueue ();
    SoftReference sr = new SoftReference (new Employee (), q);

    After the garbage collector clears the referent's soft reference, it appends SoftReference's strong reference to the reference queue that q references. The addition of SoftReference happens when the garbage collector calls Reference's enqueue() method (behind the scenes). Your program can either poll the reference queue, by calling ReferenceQueue's poll() method, or block, by calling ReferenceQueue's no-argument remove() method, until the reference arrives on the queue. At that point, your program can either stop polling or automatically unblock. Because the poll() and remove() methods return a SoftReference object reference (through the Reference return types), you discover which soft reference cleared; you can then modify your cache as appropriate.

    To demonstrate reference queues and soft references, I have created a SoftReferenceDemo application, which chooses to call poll() instead of remove() to increase the likelihood of garbage collection. If the application was to call remove(), the garbage collector might not run -- because the application doesn't constantly create objects and nullify their references. Hence, the application would remain blocked. Examine SoftReferenceDemo's source code in Listing 1:

    Listing 1. SoftReferenceDemo.java

    // SoftReferenceDemo.java

    import java.lang.ref.*;

    class Employee
    {
       private String name;

       Employee (String name)
       {
          this.name = name;
       }

       public String toString ()
       {
          return name;
       }
    }

    class SoftReferenceDemo
    {
       public static void main (String [] args)
       {
          // Create two Employee objects that are strongly reachable from e1
          // and e2.

          Employee e1 = new Employee ("John Doe");
          Employee e2 = new Employee ("Jane Doe");

          // Create a ReferenceQueue object that is strongly reachable from q.

          ReferenceQueue q = new ReferenceQueue ();

          // Create a SoftReference array with room for two references to
          // SoftReference objects. The array is strongly reachable from sr.

          SoftReference [] sr = new SoftReference [2];

          // Assign a SoftReference object to each array element. That object
          // is strongly reachable from that element. Each SoftReference object
          // encapsulates an Employee object that is referenced by e1 or e2 (so
          // the Employee object is softly reachable from the SoftReference
          // object), and associates the ReferenceQueue object, referenced by
          // q, with the SoftReference object.

          sr [0] = new SoftReference (e1, q);
          sr [1] = new SoftReference (e2, q);

          // Remove the only strong references to the Employee objects.

          e1 = null;
          e2 = null;

          // Poll reference queue until SoftReference object arrives.

          Reference r;
          while ((r = q.poll ()) == null)
          {
             System.out.println ("Polling reference queue");

             // Suggest that the garbage collector should run.

             System.gc ();
          }

          // Identify the SoftReference object whose soft reference was
          // cleared, and print an appropriate message.

          if (r == sr [0])
              System.out.println ("John Doe Employee object's soft reference " +
                                  "cleared");
          else
              System.out.println ("Jane Doe Employee object's soft reference " +
                                  "cleared");

          // Attempt to retrieve a reference to the Employee object.

          Employee e = (Employee) r.get ();

          // e will always be null because soft references are cleared before
          // references to their containing SoftReference objects are queued
          // onto a reference queue.

          if (e != null)
              System.out.println (e.toString ());
       }
    }

    When run, SoftReferenceDemo might poll the reference queue for a short time or a long time. The following output shows one SoftReferenceDemo invocation:

    Polling reference queue
    Polling reference queue
    Polling reference queue
    Polling reference queue
    Polling reference queue
    Polling reference queue
    Polling reference queue
    Polling reference queue
    Polling reference queue
    Polling reference queue
    Polling reference queue
    Polling reference queue
    Polling reference queue
    Jane Doe Employee object's soft reference cleared

    SoftReferenceDemo calls System.gc (); (in a loop) to encourage the garbage collector to run. Eventually, at least on my platform, the garbage collector runs, and at least one soft reference clears. After that soft reference clears, a reference to the soft reference's enclosing SoftReference object appends to the reference queue. By comparing the returned reference with each sr array element reference, the program code can determine which Employee referent had its soft reference cleared. We can now recreate the Employee object, if so desired.

    Weak references
    The weakly reachable state manifests itself in Java through the WeakReference class. When you initialize a WeakReference object, you store a referent's reference in that object. The object contains a weak reference to the referent, and the referent is weakly reachable if there are no other references, apart from weak references, to that referent. If heap memory is running low, the garbage collector locates weakly reachable objects and clears their weak references -- by calling WeakReference's inherited clear() method. Assuming no other references point to those referents, the referents enter either the resurrectable state or the unreachable state. Assuming the referents enter the resurrectable state, the garbage collector calls their finalize() methods. If those methods do not make the referents reachable, the referents become unreachable, and the garbage collector can reclaim their memory.

    Note
    The primary difference between soft references and weak references is that the garbage collector might clear a soft reference but always clears a weak reference.

    To create a WeakReference object, pass a reference to a referent in one of two constructors. For example, the following code fragment creates a ReferenceQueue object and uses the WeakReference(Object referent, ReferenceQueue q) constructor to create a WeakReference object (that encapsulates a Vehicle referent) and associate WeakReference with the reference queue:

    ReferenceQueue q = new ReferenceQueue ();
    WeakReference wr = new WeakReference (new Vehicle (), q);

    Use weak references to obtain notification when significant objects are no longer strongly reachable. For example, suppose you create an application that simulates a company. That application periodically creates Employee objects. For each object, the application also creates an employee-specific Benefits object. During the simulation, employees eventually retire and their Employee objects are made eligible for garbage collection. Because it would prove detrimental for a Benefits object to hang around after its associated Employee object is garbage collected, the program should notice when Employee is no longer strongly reachable.

    To obtain that notification, your code first creates WeakReference and ReferenceQueue objects. The code then passes Employee and ReferenceQueue object references to the WeakReference constructor. Next, the program stores the WeakReference object and a newly created Benefits object in a hash table data structure. That data structure forms an association between the WeakReference object (known as the key, because it identifies the hash table entry) and the Benefits object (known as that entry's value). The program can enter a polling loop where it keeps checking the reference queue to find out when the garbage collector clears the weak reference to the Employee object. Once that happens, the garbage collector places a reference to the WeakReference object on the reference queue. The program can then use that reference to remove the WeakReference/Benefits entry from the hash table. To see how the program accomplishes that task, check out Listing 2; it creates a String object as the key and an Object object as the value:

    Listing 2. WeakReferenceDemo.java

    // WeakReferenceDemo.java

    import java.lang.ref.*;
    import java.util.*;

    class WeakReferenceDemo
    {
       public static void main (String [] args)
       {
          // Create a String object that is strongly reachable from key.

          String key = new String ("key");

          /*
             Note: For this program, you cannot say String key = "key";. You
                   cannot do that because (by itself), "key" is strongly
                   referenced from an internal constant pool data structure
                   (that I will discuss in a future article). There is no
                   way for the program to nullify that strong reference. As
                   a result, that object will never be garbage collected,
                   and the polling loop will be infinite.
          */

          // Create a ReferenceQueue object that is strongly reachable from q.

          ReferenceQueue q = new ReferenceQueue ();

          // Create a WeakReference object that is strongly reachable from wr.
          // The WeakReference object encapsulates the String object that is
          // referenced by key (so the String object is weakly-reachable from
          // the WeakReference object), and associates the ReferenceQueue
          // object, referenced by q, with the WeakReference object.

          WeakReference wr = new WeakReference (key, q);

          // Create an Object object that is strongly reachable from value.

          Object value = new Object ();

          // Create a Hashtable object that is strongly reachable from ht.

          Hashtable ht = new Hashtable ();

          // Place the WeakReference and Object objects in the hash table.

          ht.put (wr, value);

          // Remove the only strong reference to the String object.

          key = null;

          // Poll reference queue until WeakReference object arrives.

          Reference r;
          while ((r = q.poll ()) == null)
          {
             System.out.println ("Polling reference queue");

             // Suggest that the garbage collector should run.

             System.gc ();
          }

          // Using strong reference to the Reference object, remove the entry
          // from the Hashtable where the WeakReference object serves as that
          // entry's key.

          value = ht.remove (r);

          // Remove the strong reference to the Object object, so that object
          // is eligible for garbage collection. Although not necessary in this
          // program, because we are about to exit, imagine a continuously-
          // running program and that this code is in some kind of long-lasting
          // loop.

          value = null;
       }
    }

    Unlike SoftReferenceDemo, WeakReferenceDemo doesn't spend much time polling. After one call to System.gc ();, the garbage collector clears the weak reference to the String referent in the WeakReference object that wr references. Basically, WeakReferenceDemo works as follows:

    1. WeakReferenceDemo creates a String object that serves as a key. You must create that String object with a String constructor instead of simply assigning a String literal to key. The garbage collector will probably never collect String objects that you -- apparently -- create by assigning string literals to String reference variables. (A future article exploring strings will explain why.)

    2. Following a String's creation, WeakReferenceDemo creates a ReferenceQueue object and a WeakReference object that encapsulates String, which becomes the referent. We now have strong (via key) and weak (via the weak reference in the WeakReference object that wr references) references to String.

    3. WeakReference creates an Object value object that eventually associates with the String key object. A Hashtable object is created, and the table stores an entry consisting of the objects WeakReference and Object. (You will learn about the Hashtable data structure class in a future article.)

    4. WeakReference nullifies the String object's key reference, so the only String reference is the weak reference inside the WeakReference object.

    5. A polling loop allows us to wait for the garbage collector to clear the weak reference and place a strong reference to the WeakReference object on the reference queue. On my platform, only one System.gc (); call is necessary to request the garbage collector to run. The first time it runs, all weak references clear, and the next call to q.poll () returns a reference to WeakReference.

    6. After the loop, you can simply remove the WeakReference/Object entry from the hash table and nullify the Object's reference in value.

    Note
    To save yourself the trouble of automatically removing entries from a hash table, Java supplies the WeakHashMap class. Investigate that class in the SDK documentation and rewrite WeakReferenceDemo to use that class.

    Phantom references
    The phantomly reachable state manifests itself in Java through the PhantomReference class. When you initialize a PhantomReference object, you store a referent's reference in that object. The object contains a phantom reference to the referent, and the referent is phantomly reachable if there are no other references, apart from phantom references, to that referent. A phantomly reachable referent's finalize() method (assuming that method exists) has already run and the garbage collector is about to reclaim the referent's memory. A program receives notification, by way of a reference queue, when the referent becomes phantomly reachable, and subsequently performs post-finalization cleanup tasks that relate to the referent but do not involve the referent -- because there is no way for the program to access the referent.

    Unlike SoftReference and WeakReference objects, you must create PhantomReference objects with a reference queue. When the garbage collector discovers that a PhantomReference object's referent is phantomly reachable, it appends a PhantomReference reference to the associated reference queue -- by calling Reference's enqueue() method. The following code fragment demonstrates the creation of a PhantomReference containing a String referent:

    ReferenceQueue q = new ReferenceQueue ();
    PhantomReference pr = new PhantomReference (new String ("Test"), q);

    There is a second difference between SoftReference, WeakReference, and PhantomReference objects. If either a SoftReference or a WeakReference object has an associated reference queue, the garbage collector places a reference to that object on the reference queue sometime after it clears the referent's soft or weak reference. In contrast, the garbage collector places a reference to a PhantomReference object onto the queue before the phantom reference clears. Also, the program, not the garbage collector, clears the phantom reference by calling PhantomReference's clear() method, inherited from the Reference class. Until the phantom reference clears, the garbage collector does not reclaim the referent. Once the phantom reference clears, however, the referent moves from the phantomly reachable state to the unreachable state. Game over for the referent!

    Note
    By now, you know a call to get() on a SoftReference or WeakReference object, whose reference returns from a call to poll() or remove(), cannot return a referent's reference. That's not possible because the garbage collector clears the referent's soft or weak reference before placing the SoftReference or WeakReference object's reference on the queue. However, because the garbage collector does not clear the referent's phantom reference, you would expect get() to return a reference to that referent. Instead, get() returns null to prevent the referent from being resurrected.

    Listing 3 demonstrates phantom references:

    Listing 3. PhantomReferenceDemo.java

    // PhantomReferenceDemo.java

    import java.lang.ref.*;

    class Employee
    {
       private String name;

       Employee (String name)
       {
          this.name = name;
       }

       public void finalize () throws Throwable
       {
          System.out.println ("finalizing " + name);
          super.finalize ();
       }
    }

    class PhantomReferenceDemo
    {
       public static void main (String [] args)
       {
          // Create an Employee object that is strongly reachable from e.

          Employee e = new Employee ("John Doe");

          // Create a ReferenceQueue object that is strongly reachable from q.

          ReferenceQueue q = new ReferenceQueue ();

          // Create a PhantomReference object that is strongly reachable from
          // pr. The PhantomReference object encapsulates the Employee object
          // (so the Employee object is phantomly reachable from the
          // PhantomReference object), and associates the ReferenceQueue object,
          // referenced by q, with the PhantomReference object.

          PhantomReference pr = new PhantomReference (e, q);

          // Remove the only strong reference to the Employee object.

          e = null;

          // Poll reference queue until PhantomReference object arrives.

          Reference r;
          while ((r = q.poll ()) == null)
          {
             System.out.println ("Polling reference queue");

             // Suggest that the garbage collector should run.

             System.gc ();
          }

          System.out.println ("Employee referent in phantom-reachable state.");

          // Clear the PhantomReference object's phantom reference, so that
          // the Employee referent enters the unreachable state.

          pr.clear ();

          // Clear the strong reference to the PhantomReference object, so the
          // PhantomReference object is eligible for garbage collection. (The
          // same could be done for the ReferenceQueue and Reference objects --
          // referenced by q and r, respectively.) Although not necessary in
          // this trivial program, you might consider doing such clearing in a
          // long-running loop, so that objects not needed can be collected.

          pr = null;
       }
    }

    When run, PhantomReferenceDemo produces output similar to the following:

    Polling reference queue
    finalizing John Doe
    Polling reference queue
    Employee referent in phantom-reachable state.

    The garbage collector has not yet run when the first Polling reference queue message appears. The first call to System.gc (); causes the JVM to try to run the garbage collector. It runs and executes Employee's finalize() method, which prints finalizing John Doe. The second Polling reference queue message indicates that a second call is made to System.gc ();. That call causes the garbage collector to move the Employee referent from the resurrectable state to the phantomly reachable state.

    A close look at Listing 3 shows a pr.clear (); method call. That method call clears the phantom reference to the Employee referent in the PhantomReference object. That referent now enters the unreachable state, and the garbage collector can reclaim its memory the next time it runs.

    Review
    The Reference Objects API gives your programs limited interaction with the garbage collector through the SoftReference, WeakReference, and PhantomReference classes. Objects created from SoftReference contain soft references to their referents. You can use soft references to manage image and other memory-sensitive caches. Objects that you create from WeakReference contain weak references to their referents. You use weak references to obtain notification when significant objects are no longer strongly reachable. Finally, PhantomReference objects contain phantom references to their referents. You can use phantom references to perform post-finalization cleanup on the referents.

    I encourage you to email me with any questions you might have involving either this or any previous article's material. (Please, keep such questions relevant to material discussed in this column's articles.) Your questions and my answers will appear in the relevant study guides.

    In next month's article, you will learn about nested classes.


    Printer-friendly version Printer-friendly version | Send this article to a friend Mail this to a friend

    About the author
    Jeff Friesen has been involved with computers for the past 20 years. He holds a degree in computer science and has worked with many computer languages. Jeff has also taught introductory Java programming at the college level. In addition to writing for JavaWorld, he has written his own Java book for beginners -- Java 2 By Example, Second Edition (Que Publishing, 2001; ISBN: 0789725932) -- and helped write Special Edition Using Java 2 Platform (Que Publishing, 2001; ISBN: 0789720183). Jeff goes by the nickname Java Jeff (or JavaJeff). To see what he's working on, check out his Website at http://www.javajeff.com.


    'java core' 카테고리의 다른 글

    Java condition variable  (0) 2005.02.18
    Threads from aritma  (0) 2005.02.12
    Garbage collection from javaworld  (0) 2005.01.28
    자바 코드 컨벤션  (0) 2005.01.24
    J2ME쪽 JSR모음  (0) 2005.01.24
    Posted by '김용환'
    ,

    FROM : http://www.javaworld.com/javaworld/jw-12-2001/jw-1207-java101.html?

    Trash talk, Part 1

    Java recycles its memory through garbage collection

    Summary
    One feature that distinguishes Java from other computer languages is its garbage collection abilities. In this article, Jeff Friesen introduces you to garbage collection and shows how Java's optional support for it affects your programs. While studying garbage collection, you will also learn about reachability, finalization, and resurrection.

    For answers to last month's homework, for this month's homework, and for additional material related to this article, visit the associated study guide. (4,400 words; December 7, 2001)

    By Jeff Friesen


    Printer-friendly version
    Printer-friendly version | Send this article to a friend Mail this to a friend


    Page 1 of 3

    Advertisement

    Take out the trash! When it's applied to computer languages, that command conjures up a different meaning than the one you're used to. In Java, trash, or garbage, is heap memory that a program allocates for objects but no longer references; such memory serves no useful purpose. Just as real-world garbage clogs a trash bin, as Java's garbage piles up, it reduces the total amount of heap memory. If the JVM does not remove that garbage, the JVM eventually runs out of heap memory and can't fulfill future program requests to allocate memory for new objects. To prevent that from happening, the JVM takes out the trash through its use of garbage collection.

    In this article, I introduce you to garbage collection, a term computer developers commonly use to refer to memory recycling -- that is, the reuse of heap memory. After learning important details about garbage collection and its various algorithms, you'll learn the practical side of garbage collection from Java's perspective: how to ask the JVM to run the garbage collector, how to finalize objects, and how to resurrect finalized objects (and why that is a no-no!). We start exploring garbage collection by defining that term.

    Read the whole series on garbage collection:

    Note
    Java's garbage collection activity is JVM-specific. As a result, the output from various programs that appear in this article will not necessarily match your output. Keep that in mind when you start reading the section entitled "Run Java's Garbage Collector."

    What is garbage collection?
    From a source code perspective, you use the keyword new to create an object. After you compile that source code into a classfile, the JVM eventually encounters an equivalent byte code instruction to create that object and initialize the object's instance fields to default values. If the object is a nonarray object, such as a single String object, the JVM executes a new byte code instruction to allocate memory for that object in the JVM's object heap, a pool of JVM memory that stores objects. However, if the object is an array object, the JVM executes one of the newarray, anewarray, or multianewarray byte code instructions to perform the same tasks. In any case, the JVM reserves memory for the new object in its object heap. As long as that object exists, the JVM does not give that memory to some other object.

    Each of the aforementioned byte code instructions returns a reference to the just-allocated memory chunk. That reference might be a C++-style pointer or some arbitrary value identifying that memory. What constitutes the reference depends on the JVM implementation; you do not need to know about it for the purposes of this discussion.

    Typically, you assign the just-returned reference to some kind of reference variable whose type is either the same as or similar to the type of the just-created object. Alternatively, you might create a temporary object (making it temporary by not assigning its reference to any reference variable) to call one of that object's methods. For example, you might execute the following code fragment to print a circle's area by first creating a Circle object with (10.0, 10.0) as the center and 25.0 as the radius, and then calling Circle's area() method via the newly returned reference:

    System.out.println ("Area = " + new Circle (10.0, 10.0, 25.0).area ());

    The code fragment creates a Circle object, calls its constructor to initialize that object to a specific center and radius, returns a Circle reference, and uses that reference to call Circle's area() method, whose return value subsequently prints. After area() returns, the Circle's reference disappears from the program. That is why Circle is known as a temporary object; without the reference, you can no longer call that object's instance methods.

    What happens to an object when you lose its reference? In a language like C++, you have just tied up heap memory. Without the object's reference, that memory remains occupied until the program exits. In Java, however, the reference becomes eligible for garbage collection -- the process by which some executable, such as the JVM, automatically frees an object's memory when a single reference to that memory no longer exists.

    When a Java program runs, a portion of most JVMs known as the garbage collector runs as a background thread to perform garbage collection. Because that thread runs occasionally at nondeterministic times, you do not know when it will run. (I will cover threads in a future article.)

    To carry out garbage collection, the garbage collector thread performs at least the first of the following two main tasks:

    • It frees an object's heap memory for later use by a subsequently created object. After all, heap memory is not infinite, and a moment comes when the JVM either needs to free object memory or shut down because all available heap memory has run out.

    • It defragments the heap. As the JVM creates objects and its garbage collector frees the memory of unreferenced objects, the heap fragments. Free memory holes appear among blocks of memory assigned to objects. When the JVM attempts to create a new object, enough free memory, from the sum total of all holes, might be available to accommodate the object. However, there might not be a free memory hole large enough to hold the object's instance fields. Defragmentation moves all occupied objects' memory to one end of the heap. That memory serves as one large hole that the JVM can use to allocate memory for new objects.

    Note
    The Java Language Specification (JLS), which is the official word on the Java language, does not state that a JVM implementation must support a garbage collector. For example, a JVM implementation on a smart card -- a plastic card with an embedded processor -- might require all Java programs to fit within the confines of that card's memory. As a result, the smart card JVM would not need a garbage collector. However, most JVMs need garbage collectors.


    Next page >
    Page 1 Trash talk, Part 1
    Page 2 Garbage collection algorithms
    Page 3 Run Java's garbage collector

    Printer-friendly version Printer-friendly version | Send this article to a friend Mail this to a friend



    'java core' 카테고리의 다른 글

    Threads from aritma  (0) 2005.02.12
    Reference object model from java world  (0) 2005.01.28
    자바 코드 컨벤션  (0) 2005.01.24
    J2ME쪽 JSR모음  (0) 2005.01.24
    Java 코딩 지침  (0) 2005.01.24
    Posted by '김용환'
    ,

    자바 코드 컨벤션

    java core 2005. 1. 24. 19:24

    'java core' 카테고리의 다른 글

    Threads from aritma  (0) 2005.02.12
    Reference object model from java world  (0) 2005.01.28
    Garbage collection from javaworld  (0) 2005.01.28
    J2ME쪽 JSR모음  (0) 2005.01.24
    Java 코딩 지침  (0) 2005.01.24
    Posted by '김용환'
    ,