How does xargs know when a stdin input ends, so that it can start processing it?
up vote
3
down vote
favorite
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
New contributor
add a comment |
up vote
3
down vote
favorite
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
New contributor
1
How does any program know when stdin ends? How doescat
know to exit when it's reached the tail of the file it's reading, for example? Why is the answer to howxargs
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 theread(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
add a comment |
up vote
3
down vote
favorite
up vote
3
down vote
favorite
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
New contributor
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
xargs
New contributor
New contributor
New contributor
asked 4 hours ago
Ben
2568
2568
New contributor
New contributor
1
How does any program know when stdin ends? How doescat
know to exit when it's reached the tail of the file it's reading, for example? Why is the answer to howxargs
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 theread(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
add a comment |
1
How does any program know when stdin ends? How doescat
know to exit when it's reached the tail of the file it's reading, for example? Why is the answer to howxargs
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 theread(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
add a comment |
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
add a comment |
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
add a comment |
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
add a comment |
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
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
edited 3 hours ago
answered 4 hours ago
Stephen Kitt
158k23344419
158k23344419
add a comment |
add a comment |
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.
Ben is a new contributor. Be nice, and check out our Code of Conduct.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
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
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 howxargs
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 theread(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