tee

Autres langues

Langue: ja

Autres versions - même langue

Version: 2006-04-28 (openSuse - 09/10/07)

Autres sections - même nom

Section: 2 (Appels système)

̾Á°

tee - ¥Ñ¥¤¥×¤ÎÃæ¿È¤òÊ£À½¤¹¤ë

½ñ¼°


#define _GNU_SOURCE

#include <fcntl.h>



long tee(int fd_in, int fd_out, size_t len, unsigned int flags);

ÀâÌÀ

tee() ¤Ï¡¢¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿ fd_in ¤¬»²¾È¤¹¤ë¥Ñ¥¤¥×¤«¤é¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿ fd_out ¤¬»²¾È¤¹¤ë¥Ñ¥¤¥×¤ØºÇÂç len ¥Ð¥¤¥È¤Î¥Ç¡¼¥¿¤òÊ£À½¤¹¤ë¡£ ¤³¤ÎÁàºî¤Ç¤Ï¡¢Ê£À½¤µ¤ì¤ë¥Ç¡¼¥¿¤Ï fd_in ¤«¤é¤Ï¾ÃÈñ¤µ¤ì¤Ê¤¤¡£¤·¤¿¤¬¤Ã¤Æ¡¢¤³¤ì¤é¤Î¥Ç¡¼¥¿¤ò¤³¤Î¸å¤Î splice(2) ¤Ç¥³¥Ô¡¼¤¹¤ë¤³¤È¤¬¤Ç¤­¤ë¡£

flags ¤Ï°ìÏ¢¤Î½¤¾þ¥Õ¥é¥°¤Ç¤¢¤ê¡¢ splice(2) ¤ä vmsplice(2) ¤È¶¦Ä̤Î̾Á°¤Ç¤¢¤ë¡£

SPLICE_F_MOVE
¸½ºß¤Î¤È¤³¤í tee() ¤Ç¤Ï²¿¤Î¸ú²Ì¤â¤Ê¤¤¡£ splice(2) »²¾È¡£
SPLICE_F_NONBLOCK
Æþ½ÐÎÏ»þ¤ËÄä»ß (block) ¤·¤Ê¤¤¡£ ¾ÜºÙ¤Ï splice(2) »²¾È¡£
SPLICE_F_MORE
¸½ºß¤Î¤È¤³¤í tee() ¤Ç¤Ï²¿¤Î¸ú²Ì¤â¤Ê¤¤¤¬¡¢¾­ÍèŪ¤Ë¤Ï¼ÂÁõ¤µ¤ì¤ë²ÄǽÀ­¤¬¤¢¤ë¡£ splice(2) »²¾È¡£
SPLICE_F_GIFT
tee() ¤Ç¤Ï̤»ÈÍÑ¡£ vmsplice(2) »²¾È¡£

ÊÖ¤êÃÍ

À®¸ù¤·¤Æ´°Î»¤¹¤ë¤È¡¢ tee() ¤ÏÆþ½ÐÎÏ´Ö¤ÇÊ£À½¤µ¤ì¤¿¥Ð¥¤¥È¿ô¤òÊÖ¤¹¡£ ÊÖ¤êÃÍ 0 ¤Ï¥Ç¡¼¥¿¤ÎžÁ÷¤¬¹Ô¤ï¤ì¤Ê¤«¤Ã¤¿¤³¤È¤ò¼¨¤¹¡£ ¤³¤Î¾ì¹ç¡¢½èÍý¤òÄä»ß (block) ¤·¤Æ¤â̵°ÕÌ£¤Ç¤¢¤ë¡£ ¤Ê¤¼¤Ê¤é¡¢ fd_in ¤¬»²¾È¤¹¤ë¥Ñ¥¤¥×¤Î½ñ¤­¹þ¤ß¦¤ËÀܳ¤µ¤ì¤Æ¤¤¤ë¼Ô¤¬¤¤¤Ê¤¤¤«¤é¤Ç¤¢¤ë¡£

¥¨¥é¡¼¤Î¾ì¹ç¡¢ tee() ¤Ï -1 ¤òÊÖ¤·¡¢ errno ¤Ë¥¨¥é¡¼¤ò¼¨¤¹ÃͤòÀßÄꤹ¤ë¡£

¥¨¥é¡¼

EINVAL
fd_in ¤È fd_out ¤Î¤É¤Á¤é¤«¤¬¥Ñ¥¤¥×¤ò»²¾È¤·¤Æ¤¤¤Ê¤¤¡£¤â¤·¤¯¤Ï fd_in ¤È fd_out ¤¬Æ±¤¸¥Ñ¥¤¥×¤ò»²¾È¤·¤Æ¤¤¤ë¡£
ENOMEM
¥á¥â¥êÉÔ­¡£

¥Ð¡¼¥¸¥ç¥ó

tee(2) ¥·¥¹¥Æ¥à¥³¡¼¥ë¤Ï Linux 2.6.17 ¤Ç½é¤á¤ÆÅо줷¤¿¡£

½àµò

¤³¤Î¥·¥¹¥Æ¥à¥³¡¼¥ë¤Ï Linux ¸ÇÍ­¤Ç¤¢¤ë¡£

Ãí°Õ

³µÇ°¤È¤·¤Æ¤Ï¡¢ tee() ¤ÏÆó¤Ä¤Î¥Ñ¥¤¥×´Ö¤Ç¥Ç¡¼¥¿¤Î¥³¥Ô¡¼¤ò¹Ô¤¦¡£ ¤·¤«¤·¡¢¼ÂºÝ¤Ë¤Ï¼Â¥Ç¡¼¥¿¤Î¥³¥Ô¡¼¤Ï¹Ô¤ï¤ì¤Ê¤¤¡£ ÆâÉô¤Ç¤Ï¡¢ tee() ¤ÏÆþÎϦ¤ËÂФ¹¤ë»²¾È¤À¤±¤òºîÀ®¤¹¤ë¤³¤È¤Ç½ÐÎϦ¤Ë¥Ç¡¼¥¿¤ò Äɲ乤롣

Îã

°Ê²¼¤ÎÎã¤Ï¡¢ tee(2) ¥·¥¹¥Æ¥à¥³¡¼¥ë¤ò»È¤Ã¤Æ¡¢ ´ðËÜŪ¤Ê tee(1) ¥×¥í¥°¥é¥à¤ò¼ÂÁõ¤·¤¿¤â¤Î¤Ç¤¢¤ë¡£



#define _GNU_SOURCE

#include <fcntl.h>

#include <stdio.h>

#include <stdlib.h>

#include <unistd.h>

#include <assert.h>

#include <errno.h>

#include <limits.h>



int

main(int argc, char *argv[])

{

    int fd;

    int len, slen;



    assert(argc == 2);



    fd = open(argv[1], O_WRONLY | O_CREAT | O_TRUNC, 0644);

    if (fd == -1) {

        perror("open");

        exit(EXIT_FAILURE);

    }



    do {

        /*

         * tee stdin to stdout.

         */

        len = tee(STDIN_FILENO, STDOUT_FILENO,

                  INT_MAX, SPLICE_F_NONBLOCK);



        if (len < 0) {

            if (errno == EAGAIN)

                continue;

            perror("tee");

            exit(EXIT_FAILURE);

        } else

            if (len == 0)

                break;



        /*

         * Consume stdin by splicing it to a file.

         */

        while (len > 0) {

            slen = splice(STDIN_FILENO, NULL, fd, NULL,

                          len, SPLICE_F_MOVE);

            if (slen < 0) {

                perror("splice");

                break;

            }

            len -= slen;

        }

    } while (1);



    close(fd);

    exit(EXIT_SUCCESS);

}

´ØÏ¢¹àÌÜ

splice(2), vmsplice(2), feature_test_macros(7)