How does xargs know when a stdin input ends, so that it can start processing it?











up vote
3
down vote

favorite
1












After reading Stephen Kitt's reply, xargs waits for receiving the stdin input before processing any of the input, such as splitting it into arguments.



How does xargs know when a stdin input ends, so that it can start processing it?



Is -E used for specifying the end of a stdin input?



Without it, how does xargs knows when it ends? Is there some timeout?










share|improve this question







New contributor




Ben is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
















  • 1




    How does any program know when stdin ends? How does cat know to exit when it's reached the tail of the file it's reading, for example? Why is the answer to how xargs knows when it's reached the end of its stdin any different?
    – Charles Duffy
    1 hour ago










  • I don't know. Could you enlighten me?
    – Ben
    1 hour ago










  • That actually helps to clarify the question quite a lot -- that you're not looking for an xargs-specific answer but a generic UNIX-file-operations answer. Stephen is correct -- read() returning 0 indicates EOF. From the read(2) man page, section RETURN VALUES: If successful, the number of bytes actually read is returned. Upon reading end-of-file, zero is returned. Otherwise, a -1 is returned and the global variable errno is set to indicate the error.
    – Charles Duffy
    1 hour ago












  • ...so, read() will either actually read some bytes (and return a positive number with the number of bytes read), or fail to read some bytes (and return a negative number that indicates how/why it failed), or hit end-of-file (and return 0).
    – Charles Duffy
    1 hour ago















up vote
3
down vote

favorite
1












After reading Stephen Kitt's reply, xargs waits for receiving the stdin input before processing any of the input, such as splitting it into arguments.



How does xargs know when a stdin input ends, so that it can start processing it?



Is -E used for specifying the end of a stdin input?



Without it, how does xargs knows when it ends? Is there some timeout?










share|improve this question







New contributor




Ben is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
















  • 1




    How does any program know when stdin ends? How does cat know to exit when it's reached the tail of the file it's reading, for example? Why is the answer to how xargs knows when it's reached the end of its stdin any different?
    – Charles Duffy
    1 hour ago










  • I don't know. Could you enlighten me?
    – Ben
    1 hour ago










  • That actually helps to clarify the question quite a lot -- that you're not looking for an xargs-specific answer but a generic UNIX-file-operations answer. Stephen is correct -- read() returning 0 indicates EOF. From the read(2) man page, section RETURN VALUES: If successful, the number of bytes actually read is returned. Upon reading end-of-file, zero is returned. Otherwise, a -1 is returned and the global variable errno is set to indicate the error.
    – Charles Duffy
    1 hour ago












  • ...so, read() will either actually read some bytes (and return a positive number with the number of bytes read), or fail to read some bytes (and return a negative number that indicates how/why it failed), or hit end-of-file (and return 0).
    – Charles Duffy
    1 hour ago













up vote
3
down vote

favorite
1









up vote
3
down vote

favorite
1






1





After reading Stephen Kitt's reply, xargs waits for receiving the stdin input before processing any of the input, such as splitting it into arguments.



How does xargs know when a stdin input ends, so that it can start processing it?



Is -E used for specifying the end of a stdin input?



Without it, how does xargs knows when it ends? Is there some timeout?










share|improve this question







New contributor




Ben is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.











After reading Stephen Kitt's reply, xargs waits for receiving the stdin input before processing any of the input, such as splitting it into arguments.



How does xargs know when a stdin input ends, so that it can start processing it?



Is -E used for specifying the end of a stdin input?



Without it, how does xargs knows when it ends? Is there some timeout?







xargs






share|improve this question







New contributor




Ben is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.











share|improve this question







New contributor




Ben is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.









share|improve this question




share|improve this question






New contributor




Ben is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.









asked 4 hours ago









Ben

2568




2568




New contributor




Ben is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.





New contributor





Ben is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.






Ben is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.








  • 1




    How does any program know when stdin ends? How does cat know to exit when it's reached the tail of the file it's reading, for example? Why is the answer to how xargs knows when it's reached the end of its stdin any different?
    – Charles Duffy
    1 hour ago










  • I don't know. Could you enlighten me?
    – Ben
    1 hour ago










  • That actually helps to clarify the question quite a lot -- that you're not looking for an xargs-specific answer but a generic UNIX-file-operations answer. Stephen is correct -- read() returning 0 indicates EOF. From the read(2) man page, section RETURN VALUES: If successful, the number of bytes actually read is returned. Upon reading end-of-file, zero is returned. Otherwise, a -1 is returned and the global variable errno is set to indicate the error.
    – Charles Duffy
    1 hour ago












  • ...so, read() will either actually read some bytes (and return a positive number with the number of bytes read), or fail to read some bytes (and return a negative number that indicates how/why it failed), or hit end-of-file (and return 0).
    – Charles Duffy
    1 hour ago














  • 1




    How does any program know when stdin ends? How does cat know to exit when it's reached the tail of the file it's reading, for example? Why is the answer to how xargs knows when it's reached the end of its stdin any different?
    – Charles Duffy
    1 hour ago










  • I don't know. Could you enlighten me?
    – Ben
    1 hour ago










  • That actually helps to clarify the question quite a lot -- that you're not looking for an xargs-specific answer but a generic UNIX-file-operations answer. Stephen is correct -- read() returning 0 indicates EOF. From the read(2) man page, section RETURN VALUES: If successful, the number of bytes actually read is returned. Upon reading end-of-file, zero is returned. Otherwise, a -1 is returned and the global variable errno is set to indicate the error.
    – Charles Duffy
    1 hour ago












  • ...so, read() will either actually read some bytes (and return a positive number with the number of bytes read), or fail to read some bytes (and return a negative number that indicates how/why it failed), or hit end-of-file (and return 0).
    – Charles Duffy
    1 hour ago








1




1




How does any program know when stdin ends? How does cat know to exit when it's reached the tail of the file it's reading, for example? Why is the answer to how xargs knows when it's reached the end of its stdin any different?
– Charles Duffy
1 hour ago




How does any program know when stdin ends? How does cat know to exit when it's reached the tail of the file it's reading, for example? Why is the answer to how xargs knows when it's reached the end of its stdin any different?
– Charles Duffy
1 hour ago












I don't know. Could you enlighten me?
– Ben
1 hour ago




I don't know. Could you enlighten me?
– Ben
1 hour ago












That actually helps to clarify the question quite a lot -- that you're not looking for an xargs-specific answer but a generic UNIX-file-operations answer. Stephen is correct -- read() returning 0 indicates EOF. From the read(2) man page, section RETURN VALUES: If successful, the number of bytes actually read is returned. Upon reading end-of-file, zero is returned. Otherwise, a -1 is returned and the global variable errno is set to indicate the error.
– Charles Duffy
1 hour ago






That actually helps to clarify the question quite a lot -- that you're not looking for an xargs-specific answer but a generic UNIX-file-operations answer. Stephen is correct -- read() returning 0 indicates EOF. From the read(2) man page, section RETURN VALUES: If successful, the number of bytes actually read is returned. Upon reading end-of-file, zero is returned. Otherwise, a -1 is returned and the global variable errno is set to indicate the error.
– Charles Duffy
1 hour ago














...so, read() will either actually read some bytes (and return a positive number with the number of bytes read), or fail to read some bytes (and return a negative number that indicates how/why it failed), or hit end-of-file (and return 0).
– Charles Duffy
1 hour ago




...so, read() will either actually read some bytes (and return a positive number with the number of bytes read), or fail to read some bytes (and return a negative number that indicates how/why it failed), or hit end-of-file (and return 0).
– Charles Duffy
1 hour ago










1 Answer
1






active

oldest

votes

















up vote
9
down vote













In the absence of an -E option, which specifies an explicit end-of-file marker, xargs knows it’s exhausted its standard input (or any input specified by the -a option) when read() returns 0.



You can see this in action by running



printf '%s ' {1..1024} | strace -e read xargs -s 2048 -x





share|improve this answer























    Your Answer








    StackExchange.ready(function() {
    var channelOptions = {
    tags: "".split(" "),
    id: "106"
    };
    initTagRenderer("".split(" "), "".split(" "), channelOptions);

    StackExchange.using("externalEditor", function() {
    // Have to fire editor after snippets, if snippets enabled
    if (StackExchange.settings.snippets.snippetsEnabled) {
    StackExchange.using("snippets", function() {
    createEditor();
    });
    }
    else {
    createEditor();
    }
    });

    function createEditor() {
    StackExchange.prepareEditor({
    heartbeatType: 'answer',
    convertImagesToLinks: false,
    noModals: true,
    showLowRepImageUploadWarning: true,
    reputationToPostImages: null,
    bindNavPrevention: true,
    postfix: "",
    imageUploader: {
    brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
    contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
    allowUrls: true
    },
    onDemand: true,
    discardSelector: ".discard-answer"
    ,immediatelyShowMarkdownHelp:true
    });


    }
    });






    Ben is a new contributor. Be nice, and check out our Code of Conduct.










     

    draft saved


    draft discarded


















    StackExchange.ready(
    function () {
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f483939%2fhow-does-xargs-know-when-a-stdin-input-ends-so-that-it-can-start-processing-it%23new-answer', 'question_page');
    }
    );

    Post as a guest















    Required, but never shown

























    1 Answer
    1






    active

    oldest

    votes








    1 Answer
    1






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes








    up vote
    9
    down vote













    In the absence of an -E option, which specifies an explicit end-of-file marker, xargs knows it’s exhausted its standard input (or any input specified by the -a option) when read() returns 0.



    You can see this in action by running



    printf '%s ' {1..1024} | strace -e read xargs -s 2048 -x





    share|improve this answer



























      up vote
      9
      down vote













      In the absence of an -E option, which specifies an explicit end-of-file marker, xargs knows it’s exhausted its standard input (or any input specified by the -a option) when read() returns 0.



      You can see this in action by running



      printf '%s ' {1..1024} | strace -e read xargs -s 2048 -x





      share|improve this answer

























        up vote
        9
        down vote










        up vote
        9
        down vote









        In the absence of an -E option, which specifies an explicit end-of-file marker, xargs knows it’s exhausted its standard input (or any input specified by the -a option) when read() returns 0.



        You can see this in action by running



        printf '%s ' {1..1024} | strace -e read xargs -s 2048 -x





        share|improve this answer














        In the absence of an -E option, which specifies an explicit end-of-file marker, xargs knows it’s exhausted its standard input (or any input specified by the -a option) when read() returns 0.



        You can see this in action by running



        printf '%s ' {1..1024} | strace -e read xargs -s 2048 -x






        share|improve this answer














        share|improve this answer



        share|improve this answer








        edited 3 hours ago

























        answered 4 hours ago









        Stephen Kitt

        158k23344419




        158k23344419






















            Ben is a new contributor. Be nice, and check out our Code of Conduct.










             

            draft saved


            draft discarded


















            Ben is a new contributor. Be nice, and check out our Code of Conduct.













            Ben is a new contributor. Be nice, and check out our Code of Conduct.












            Ben is a new contributor. Be nice, and check out our Code of Conduct.















             


            draft saved


            draft discarded














            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f483939%2fhow-does-xargs-know-when-a-stdin-input-ends-so-that-it-can-start-processing-it%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown





















































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown

































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown







            Popular posts from this blog

            Bundesstraße 106

            Verónica Boquete

            Ida-Boy-Ed-Garten