setbuf

Autres langues

Langue: ja

Version: 2001-06-09 (openSuse - 09/10/07)

Section: 3 (Bibliothèques de fonctions)

̾Á°

setbuf, setbuffer, setlinebuf, setvbuf - ¥¹¥È¥ê¡¼¥à¤Î¥Ð¥Ã¥Õ¥¡¥ê¥ó¥°¤ÎÁàºî

½ñ¼°

#include <stdio.h>

void setbuf(FILE *stream, char *buf);
void setbuffer(FILE *stream, char *buf, size_t size);
void setlinebuf(FILE *stream);
int setvbuf(FILE *stream, char *buf, int mode , size_t size);

ÀâÌÀ

¥Ð¥Ã¥Õ¥¡¥ê¥ó¥°¤Ë¤Ï unbuffered, block buffered, line buffered ¤Î3¤Ä¤Î¥¿¥¤¥×¤¬ ¤¢¤ë¡£½ÐÎÏ¥¹¥È¥ê¡¼¥à¤Î¥¿¥¤¥×¤¬ unbuffered ¤Î¾ì¹ç¡¢¥Ç¡¼¥¿¤ò½ñ¤­¹þ¤à¤È¤¹¤°¤Ë½Ð ÎÏÀè¥Õ¥¡¥¤¥ë¤Ë½ñ¤­¹þ¤Þ¤ì¤ë¤«¥¿¡¼¥ß¥Ê¥ë¤Ëɽ¼¨¤µ¤ì¤ë¡£block buffered ¤Î¾ì¹ç¡¢Ê¸ »ú¤ÎÆɤ߽ñ¤­¤Ï¥Ö¥í¥Ã¥¯Ã±°Ì¤Ç¤¤¤Ã¤Ú¤ó¤Ë¹Ô¤ï¤ì¤ë¡£line buffered ¤Î¾ì¹ç¡¢¿·¤·¤¤ ¹Ô¤¬½ÐÎϤµ¤ì¤ë¤«¡¢¥¿¡¼¥ß¥Ê¥ë¥Ç¥Ð¥¤¥¹¤ËÀܳ¤·¤Æ¤¤¤ë¥¹¥È¥ê¡¼¥à (Ä̾stdin) ¤« ¤é¿·¤·¤¤¹Ô¤¬ÆþÎϤµ¤ì¤ë¤Þ¤Çʸ»ú¤¬¤¿¤¯¤ï¤¨¤é¤ì¤ë¡£¥Ö¥í¥Ã¥¯¤ò¶¯À©Åª¤Ë½ÐÎϤ¹¤ë¤Ë ¤Ï fflush(3) ´Ø¿ô¤ò»È¤¦¡£ (fclose(3) ¤ò»²¾È¤Î¤³¤È) Ä̾¥Õ¥¡¥¤¥ë¤Ï¤¹¤Ù¤Æ block buffered ¤Ç¤¢¤ë¡£¥Õ¥¡¥¤¥ë¤ËÂФ·¤Æ ½é¤á¤ÆÆþ½ÐÎϽèÍý¤ò¹Ô¤¦¤È malloc(3) ¤¬¸Æ¤Ó½Ð¤µ¤ì¥Ð¥Ã¥Õ¥¡¤¬³ÍÆÀ¤µ¤ì¤ë¡£¤â¤· ¥¹¥È¥ê¡¼¥à¤¬ (Ä̾ stdout ¤¬¤½¤¦¤Ç¤¢¤ë¤è¤¦¤Ë) ¥¿¡¼¥ß¥Ê¥ë¤ò»²¾È¤¹¤ë¾ì¹ç¤Ë¤Ï¡¢¥Õ¥¡¥¤¥ë¤Ï line buffered ¤È ¤Ê¤ë¡£É¸½à¥¨¥é¡¼½ÐÎÏ stderr ¤Ï¥Ç¥Õ¥©¥ë¥È¤Ç¤Ï¾ï¤Ë unbuffered ¤Ç¤¢¤ë¡£

setvbuf() ´Ø¿ô¤Ï¡¢¥ª¡¼¥×¥ó¤·¤Æ¤¤¤ëǤ°Õ¤Î¥¹¥È¥ê¡¼¥à¤ËÂФ·¤Æ¥Ð¥Ã¥Õ¥¡¤òÊѹ¹¤Ç¤­¤ë¡£ ¥Ñ¥é¥á¡¼¥¿ mode ¤Ï¡¢¼¡¤Î 3 ¤Ä¤Î¥Þ¥¯¥í¤Î¤¦¤Á¤¤¤º¤ì¤«¤Ç¤¢¤ë:

_IONBF
unbuffered
_IOLBF
line buffered
_IOFBF
fully buffered

unbuffered ¤Î¥Õ¥¡¥¤¥ë¤ò½ü¤­¡¢ buf °ú¿ô¤Ï size ¥Ð¥¤¥È°Ê¾å¤ÎÂ礭¤µ¤Î¥Ð¥Ã¥Õ¥¡¤ò»Ø¤·¤Æ¤¤¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£¤³¤Î¥Ð¥Ã¥Õ¥¡¤Ï¸½ºß¤Î ¥Ð¥Ã¥Õ¥¡¤ÎÂå¤ï¤ê¤ËÍѤ¤¤é¤ì¤ë¡£¤â¤·¡¢°ú¿ô buf ¤¬ NULL ¤Ê¤é¤Ð¡¢¥â¡¼¥É¤À¤±¤¬Êѹ¹¤µ¤ì¤ë¡£ ¿·¤·¤¤¥Ð¥Ã¥Õ¥¡¤Ï¼¡¤ËÆɤ߽ñ¤­¤·¤¿ºÝ¤Ë³ä¤êÅö¤Æ¤é¤ì¤ë¡£ setvbuf() ´Ø¿ô¤Ï¡¢¥¹¥È¥ê¡¼¥à¤ò¥ª¡¼¥×¥ó¤·¤¿¸å¡¢ ¤½¤Î¥¹¥È¥ê¡¼¥à¤ËÂФ·¤Æ²¿¤é¤«¤ÎÁàºî¤ò¤¹¤ëÁ°¤Ë¤Î¤ß»ÈÍѤǤ­¤ë¡£

¾¤Î 3 ¤Ä¤Î´Ø¿ô¤Ï setvbuf() ¤Î¸Æ¤Ó½Ð¤·¤Ëñ½ã¤ËÃÖ¤­´¹¤¨¤ë¤³¤È¤¬¤Ç¤­¤ë¡£ setbuf() ´Ø¿ô¤Ï¡¢

setvbuf(stream, buf, buf ? _IOFBF : _IONBF, BUFSIZ);
¤ÈÁ´¤¯Æ±Åù¤À¤·¡¢ setbuffer() ´Ø¿ô¤Ï¡¢¥Ð¥Ã¥Õ¥¡¥µ¥¤¥º¤¬¥Ç¥Õ¥©¥ë¥ÈÃÍ BUFSIZ ¤Ç¤Ï¤Ê¤¯°ú¿ô¤ÇÍ¿¤¨¤é¤ì¤ëÅÀ°Ê³°¤ÏƱ¤¸¤Ç¤¢¤ë¡£ setlinebuf() ´Ø¿ô¤Ï
setvbuf(stream, (char *) NULL, _IOLBF, 0);
¤ÈƱ¤¸¤Ç¤¢¤ë¡£

ÊÖ¤êÃÍ

setvbuf() ´Ø¿ô¤Ï¡¢À®¸ù¤·¤¿¾ì¹ç 0 ¤òÊÖ¤¹¡£ ¼ºÇÔ¤·¤¿¾ì¹ç¤ÏǤ°Õ¤ÎÃͤòÊÖ¤¹¤³¤È¤¬¤¢¤êÆÀ¤ë¤¬¡¢ mode ¤¬ÉÔÀµ¤Ê¾ì¹ç¤Þ¤¿¤Ï¥ê¥¯¥¨¥¹¥È¤¬¾ò·ï¤òËþ¤¿¤µ¤Ê¤¤¾ì¹ç¤Ï¡¢0 °Ê³°¤òÊÖ¤¹¡£ setvbuf() ´Ø¿ô¤¬¼ºÇÔ¤·¤¿¾ì¹ç¤Ï errno ¤òÀßÄꤹ¤ë¤³¤È¤â¤¢¤ë¡£ ¤½¤Î¾¤Î´Ø¿ô¤ÎÊÖ¤êÃÍ¤Ï void ¤Ç¤¢¤ë¡£

½àµò

setbuf() ´Ø¿ô¤ª¤è¤Ó setvbuf() ´Ø¿ô¤Ï C89 ¤È C99 ¤Ë½àµò¤·¤Æ¤¤¤ë¡£

¥Ð¥°

setbuffer() ´Ø¿ô¤ª¤è¤Ó setlinebuf() ´Ø¿ô¤Ï 4.2BSD ¤è¤êÁ°¤Î BSD ¤È¤Ï¸ß´¹À­¤¬¤Ê¤¤¡£¤Þ¤¿ Linux ¤Ç¤â(¸Å¤¤¥Ð¡¼¥¸¥ç¥ó ¤Ç¤Ï)ÍøÍѤǤ­¤Ê¤¤¤«¤â¤·¤ì¤Ê¤¤¡£4.2BSD ¤ª¤è¤Ó 4.3BSD ¤Î¥·¥¹¥Æ¥à¤Ç¤Ï setbuf() ¤Ïɬ¤ºÄɲäΥХåե¡¡¼¤Î¥µ¥¤¥º¤ò»ÈÍѤ¹¤ë¤Î¤Ç¡¢¤³¤ì¤â»È¤¦¤Ù¤­¤Ç¤Ê¤¤¡£ stream ¤òÊĤ¸¤ë»þ (¥×¥í¥°¥é¥à¤ò½ªÎ»¤¹¤ëºÝ¤Ë¤â¤³¤ì¤Ïµ¯¤­¤ë) ¤Ë¤Ï¡¢ buf ¤È ¤½¤Î»Ø¤·¼¨¤¹¶õ´Ö¤È¤¬Â¸ºß¤·¤Æ¤¤¤ë¤³¤È¤òÊݾڤ·¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£ Î㤨¤Ð¡¢¼¡¤Î¤è¤¦¤Ê»È¤¤Êý¤Ïµö¤µ¤ì¤Ê¤¤:



#include <stdio.h>



int

main(void)

{

    char buf[BUFSIZ];

    setbuf(stdin, buf);

    printf("Hello, world!\n");

    return 0;

}

´ØÏ¢¹àÌÜ

fclose(3), fflush(3), fopen(3), fread(3), malloc(3), printf(3), puts(3)