Are interrupt signals dispatched during fread() and fwrite() library calls?
up vote
3
down vote
favorite
On Linux, the C standard library calls fread
and fwrite
execute the system call equivalents, read
and write
.
The man pages for the system calls mention interrupts, saying that a short write may occur with errno
set to EINTR
. However, the man pages for the library functions say nothing about interrupts. So, can interrupts occur during these library functions?
https://linux.die.net/man/3/fwrite
c file interrupt file-handling
add a comment |
up vote
3
down vote
favorite
On Linux, the C standard library calls fread
and fwrite
execute the system call equivalents, read
and write
.
The man pages for the system calls mention interrupts, saying that a short write may occur with errno
set to EINTR
. However, the man pages for the library functions say nothing about interrupts. So, can interrupts occur during these library functions?
https://linux.die.net/man/3/fwrite
c file interrupt file-handling
man 7 linux signal is a good place for understanding signal interruption during syscall.
– JiaHao Xu
Nov 11 at 10:33
add a comment |
up vote
3
down vote
favorite
up vote
3
down vote
favorite
On Linux, the C standard library calls fread
and fwrite
execute the system call equivalents, read
and write
.
The man pages for the system calls mention interrupts, saying that a short write may occur with errno
set to EINTR
. However, the man pages for the library functions say nothing about interrupts. So, can interrupts occur during these library functions?
https://linux.die.net/man/3/fwrite
c file interrupt file-handling
On Linux, the C standard library calls fread
and fwrite
execute the system call equivalents, read
and write
.
The man pages for the system calls mention interrupts, saying that a short write may occur with errno
set to EINTR
. However, the man pages for the library functions say nothing about interrupts. So, can interrupts occur during these library functions?
https://linux.die.net/man/3/fwrite
c file interrupt file-handling
c file interrupt file-handling
edited Nov 11 at 4:05
Jonathan Leffler
555k886601012
555k886601012
asked Nov 11 at 3:58
magnus
1,24011630
1,24011630
man 7 linux signal is a good place for understanding signal interruption during syscall.
– JiaHao Xu
Nov 11 at 10:33
add a comment |
man 7 linux signal is a good place for understanding signal interruption during syscall.
– JiaHao Xu
Nov 11 at 10:33
man 7 linux signal is a good place for understanding signal interruption during syscall.
– JiaHao Xu
Nov 11 at 10:33
man 7 linux signal is a good place for understanding signal interruption during syscall.
– JiaHao Xu
Nov 11 at 10:33
add a comment |
1 Answer
1
active
oldest
votes
up vote
2
down vote
Interrupts can occur during the fread()
and fwrite()
functions (and during the read()
and write()
system calls — there's no way to stop that. However, it is not so clear what happens if an interrupt occurs — whether the signal is delivered or not. It depends on how your application (thread?) is set up to handle interrupts.
- If it ignores them, then there'll be no effect on
fread()
orfwrite()
. - If it has default handling, the program will stop; the functions will not return.
- If your signal handler exits or use
siglongjmp()
(orlongjmp()
), then the system call won't return. - If your handler returns, it will depend on what you specified to
sigaction()
when you set up the handler.
SA_RESTART
means that the underlyingread
orwrite
will be retried- No
SA_RESTART
will mean that theread
orwrite
will terminate — possibly with a short read or write, or possibly with an error anderrno
set to EINTR. - If the system call indicates failure, it is probable that
fread()
andfwrite()
will report failure too if no data was read or written before the interrupt occurred. - If some data was read or written, you'll probably get the short read or write response.
add a comment |
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
2
down vote
Interrupts can occur during the fread()
and fwrite()
functions (and during the read()
and write()
system calls — there's no way to stop that. However, it is not so clear what happens if an interrupt occurs — whether the signal is delivered or not. It depends on how your application (thread?) is set up to handle interrupts.
- If it ignores them, then there'll be no effect on
fread()
orfwrite()
. - If it has default handling, the program will stop; the functions will not return.
- If your signal handler exits or use
siglongjmp()
(orlongjmp()
), then the system call won't return. - If your handler returns, it will depend on what you specified to
sigaction()
when you set up the handler.
SA_RESTART
means that the underlyingread
orwrite
will be retried- No
SA_RESTART
will mean that theread
orwrite
will terminate — possibly with a short read or write, or possibly with an error anderrno
set to EINTR. - If the system call indicates failure, it is probable that
fread()
andfwrite()
will report failure too if no data was read or written before the interrupt occurred. - If some data was read or written, you'll probably get the short read or write response.
add a comment |
up vote
2
down vote
Interrupts can occur during the fread()
and fwrite()
functions (and during the read()
and write()
system calls — there's no way to stop that. However, it is not so clear what happens if an interrupt occurs — whether the signal is delivered or not. It depends on how your application (thread?) is set up to handle interrupts.
- If it ignores them, then there'll be no effect on
fread()
orfwrite()
. - If it has default handling, the program will stop; the functions will not return.
- If your signal handler exits or use
siglongjmp()
(orlongjmp()
), then the system call won't return. - If your handler returns, it will depend on what you specified to
sigaction()
when you set up the handler.
SA_RESTART
means that the underlyingread
orwrite
will be retried- No
SA_RESTART
will mean that theread
orwrite
will terminate — possibly with a short read or write, or possibly with an error anderrno
set to EINTR. - If the system call indicates failure, it is probable that
fread()
andfwrite()
will report failure too if no data was read or written before the interrupt occurred. - If some data was read or written, you'll probably get the short read or write response.
add a comment |
up vote
2
down vote
up vote
2
down vote
Interrupts can occur during the fread()
and fwrite()
functions (and during the read()
and write()
system calls — there's no way to stop that. However, it is not so clear what happens if an interrupt occurs — whether the signal is delivered or not. It depends on how your application (thread?) is set up to handle interrupts.
- If it ignores them, then there'll be no effect on
fread()
orfwrite()
. - If it has default handling, the program will stop; the functions will not return.
- If your signal handler exits or use
siglongjmp()
(orlongjmp()
), then the system call won't return. - If your handler returns, it will depend on what you specified to
sigaction()
when you set up the handler.
SA_RESTART
means that the underlyingread
orwrite
will be retried- No
SA_RESTART
will mean that theread
orwrite
will terminate — possibly with a short read or write, or possibly with an error anderrno
set to EINTR. - If the system call indicates failure, it is probable that
fread()
andfwrite()
will report failure too if no data was read or written before the interrupt occurred. - If some data was read or written, you'll probably get the short read or write response.
Interrupts can occur during the fread()
and fwrite()
functions (and during the read()
and write()
system calls — there's no way to stop that. However, it is not so clear what happens if an interrupt occurs — whether the signal is delivered or not. It depends on how your application (thread?) is set up to handle interrupts.
- If it ignores them, then there'll be no effect on
fread()
orfwrite()
. - If it has default handling, the program will stop; the functions will not return.
- If your signal handler exits or use
siglongjmp()
(orlongjmp()
), then the system call won't return. - If your handler returns, it will depend on what you specified to
sigaction()
when you set up the handler.
SA_RESTART
means that the underlyingread
orwrite
will be retried- No
SA_RESTART
will mean that theread
orwrite
will terminate — possibly with a short read or write, or possibly with an error anderrno
set to EINTR. - If the system call indicates failure, it is probable that
fread()
andfwrite()
will report failure too if no data was read or written before the interrupt occurred. - If some data was read or written, you'll probably get the short read or write response.
answered Nov 11 at 4:21
Jonathan Leffler
555k886601012
555k886601012
add a comment |
add a comment |
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%2fstackoverflow.com%2fquestions%2f53245721%2fare-interrupt-signals-dispatched-during-fread-and-fwrite-library-calls%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
man 7 linux signal is a good place for understanding signal interruption during syscall.
– JiaHao Xu
Nov 11 at 10:33