Scroll to navigation

READ(2) п═я┐п╨п╬п╡п╬п╢я│я┌п╡п╬ п©я─п╬пЁя─п╟п╪п╪п╦я│я┌п╟ Linux READ(2)

п≤п°п╞

read - я┤п╦я┌п╟п╣я┌ п╦п╥ я└п╟п╧п╩п╬п╡п╬пЁп╬ п╢п╣я│п╨я─п╦п©я┌п╬я─п╟

п·п▒п≈п·п═

#include <unistd.h>

ssize_t read(int fd, void *buf, size_t count);

п·п÷п≤п║п░п²п≤п∙

read() п©я▀я┌п╟п╣я┌я│я▐ п©я─п╬я┤п╦я┌п╟я┌я▄ count п╠п╟п╧я┌ п╦п╥ я└п╟п╧п╩п╬п╡п╬пЁп╬ п╢п╣я│п╨я─п╦п©я┌п╬я─п╟ fd п╡ п╠я┐я└п╣я─, п╫п╟я┤п╦п╫п╟я▌я┴п╦п╧я│я▐ п©п╬ п╟п╢я─п╣я│я┐ buf.

п∙я│п╩п╦ п╥п╫п╟я┤п╣п╫п╦п╣ count я─п╟п╡п╫п╬ п╫я┐п╩я▌, я┌п╬ read() п╡п╬п╥п╡я─п╟я┴п╟п╣я┌ п╫п╬п╩я▄ п╦ п╫п╦я┤п╣пЁп╬ п╫п╣ п╢п╣п╩п╟п╣я┌. п∙я│п╩п╦count п╠п╬п╩я▄я┬п╣ я┤п╣п╪ SSIZE_MAX, я┌п╬ я─п╣п╥я┐п╩я▄я┌п╟я┌ п╫п╣ п╬п©я─п╣п╢п╣п╩я▒п╫.

п▓п·п≈п▓п═п░п╘п░п∙п°п·п∙ п≈п²п░п╖п∙п²п≤п∙

п÷я─п╦ я┐я│п©п╣я┬п╫п╬п╪ п╡я▀п©п╬п╩п╫п╣п╫п╦п╦ п╡п╬п╥п╡я─п╟я┴п╟п╣я┌я│я▐ п╨п╬п╩п╦я┤п╣я│я┌п╡п╬ п©я─п╬я┤п╦я┌п╟п╫п╫я▀я┘ п╠п╟п╧я┌ (п╫п╬п╩я▄ п╬п╥п╫п╟я┤п╟п╣я┌ п╨п╬п╫п╣я├ я└п╟п╧п╩п╟), п╟ п©п╬п╥п╦я├п╦я▐ п╡ я└п╟п╧п╩п╣ я┐п╡п╣п╩п╦я┤п╦п╡п╟п╣я┌я│я▐ п╫п╟ я█я┌п╬ п╥п╫п╟я┤п╣п╫п╦п╣. п∙я│п╩п╦ п╨п╬п╩п╦я┤п╣я│я┌п╡п╬ п©я─п╬я┤п╦я┌п╟п╫п╫я▀я┘ п╠п╟п╧я┌ п╪п╣п╫я▄я┬п╣, я┤п╣п╪ п╨п╬п╩п╦я┤п╣я│я┌п╡п╬ п╥п╟п©я─п╬я┬п╣п╫п╫я▀я┘, я┌п╬ я█я┌п╬ п╫п╣ я│я┤п╦я┌п╟п╣я┌я│я▐ п╬я┬п╦п╠п╨п╬п╧: п╫п╟п©я─п╦п╪п╣я─, я█я┌п╬ п╪п╬пЁп╩п╬ п©я─п╬п╦п╥п╬п╧я┌п╦ п╦п╥-п╥п╟ я┌п╬пЁп╬, я┤я┌п╬ п©я─я▐п╪п╬ я│п╣п╧я┤п╟я│ п╢п╬я│я┌я┐п©п╫п╬ п╪п╣п╫я▄я┬п╣п╣ п╨п╬п╩п╦я┤п╣я│я┌п╡п╬ п╠п╟п╧я┌ (п╪п╬п╤п╣я┌ п╠я▀я┌я▄ п╦п╥-п╥п╟ я┌п╬пЁп╬, я┤я┌п╬ п©п╬п╥п╦я├п╦я▐ п╠п╩п╦п╤п╣ п╨ п╨п╬п╫я├я┐ я└п╟п╧п╩п╟, п╦п╩п╦ п©п╬я┌п╬п╪я┐ я┤я┌п╬ п╡я▀п©п╬п╩п╫я▐п╣я┌я│я▐ я┤я┌п╣п╫п╦п╣ п╦п╥ п╨п╟п╫п╟п╩п╟ п╦п╩п╦ я┌п╣я─п╪п╦п╫п╟п╩п╟), п╦п╩п╦ п©п╬я┌п╬п╪я┐ я┤я┌п╬ я─п╟п╠п╬я┌п╟ read() п╠я▀п╩п╟ п©я─п╣я─п╡п╟п╫п╟ я│п╦пЁп╫п╟п╩п╬п╪. п▓ я│п╩я┐я┤п╟п╣ п╬я┬п╦п╠п╨п╦ п╡п╬п╥п╡я─п╟я┴п╟п╣я┌я│я▐ -1, п╟ errno я┐я│я┌п╟п╫п╟п╡п╩п╦п╡п╟п╣я┌я│я▐ п╡ я│п╬п╬я┌п╡п╣я┌я│я┌п╡я┐я▌я┴п╣п╣ п╥п╫п╟я┤п╣п╫п╦п╣. п▓ я█я┌п╬п╪ я│п╩я┐я┤п╟п╣ п╦п╥п╪п╣п╫п╣п╫п╦п╣ п©п╬п╥п╦я├п╦п╦ я└п╟п╧п╩п╟ п╬я│я┌п╟я▒я┌я│я▐ п╫п╣п╬п©я─п╣п╢п╣п╩я▒п╫п╫я▀п╪ (п╣я│п╩п╦ я█я┌п╬ п╡п╬п╬п╠я┴п╣ п©я─п╬п╦я│я┘п╬п╢п╦п╩п╬).

п·п╗п≤п▒п п≤

п╓п╟п╧п╩п╬п╡я▀п╧ п╢п╣я│п╨я─п╦п©я┌п╬я─ fd я┐п╨п╟п╥я▀п╡п╟п╣я┌ п╫п╟ я└п╟п╧п╩, п╫п╣ я▐п╡п╩я▐я▌я┴п╦п╧я│я▐ я│п╬п╨п╣я┌п╬п╪ п╦ п╨п╬я┌п╬я─я▀п╧ п©п╬п╪п╣я┤п╣п╫ п╨п╟п╨ п╫п╣п╠п╩п╬п╨п╦я─я┐я▌я┴п╦п╧ (O_NONBLOCK), п╟ я┤я┌п╣п╫п╦п╣ п╡я▀п╥п╡п╟п╩п╬ п╠я▀ п╠п╩п╬п╨п╦я─п╬п╡п╨я┐.
п╓п╟п╧п╩п╬п╡я▀п╧ п╢п╣я│п╨я─п╦п©я┌п╬я─ fd я┐п╨п╟п╥я▀п╡п╟п╣я┌ п╫п╟ я│п╬п╨п╣я┌ п╦ п╬п╫ п©п╬п╪п╣я┤п╣п╫ п╨п╟п╨ п╫п╣п╠п╩п╬п╨п╦я─я┐я▌я┴п╦п╧ (O_NONBLOCK), п╟ я┤я┌п╣п╫п╦п╣ п╡я▀п╥п╡п╟п╩п╬ п╠я▀ п╠п╩п╬п╨п╦я─п╬п╡п╨я┐. POSIX.1-2001 п©п╬п╥п╡п╬п╩я▐п╣я┌ п╡п╣я─п╫я┐я┌я▄ п╩я▌п╠я┐я▌ п╬я┬п╦п╠п╨я┐ п╡ я█я┌п╬п╪ я│п╩я┐я┤п╟п╣ п╦ п╫п╣ я┌я─п╣п╠я┐п╣я┌, я┤я┌п╬п╠я▀ я█я┌п╦ п╨п╬п╫я│я┌п╟п╫я┌я▀ п╦п╪п╣п╩п╦ п╬п╢п╦п╫п╟п╨п╬п╡п╬п╣ п╥п╫п╟я┤п╣п╫п╦п╣, п©п╬я█я┌п╬п╪я┐ п©п╣я─п╣п╫п╬я│п╦п╪п╬п╣ п©я─п╦п╩п╬п╤п╣п╫п╦п╣ п╢п╬п╩п╤п╫п╬ п©я─п╬п╡п╣я─я▐я┌я▄ п╬п╠п╣ я█я┌п╦ п╡п╬п╥п╪п╬п╤п╫п╬я│я┌п╦.
fd п╫п╣ я▐п╡п╩я▐п╣я┌я│я▐ п╢п╬п©я┐я│я┌п╦п╪я▀п╪ я└п╟п╧п╩п╬п╡я▀п╪ п╢п╣я│п╨я─п╦п©я┌п╬я─п╬п╪ п╦п╩п╦ п╫п╣ п╬я┌п╨я─я▀я┌ п╫п╟ я┤я┌п╣п╫п╦п╣.
|buf п╫п╟я┘п╬п╢п╦я┌я│я▐ п╥п╟ п©я─п╣п╢п╣п╩п╟п╪п╦ п╢п╬я│я┌я┐п©п╫п╬пЁп╬ п╡п╟п╪ п╟п╢я─п╣я│п╫п╬пЁп╬ п©я─п╬я│я┌я─п╟п╫я│я┌п╡п╟.
п▓я▀п╥п╬п╡ п╠я▀п╩ п©я─п╣я─п╡п╟п╫ я│п╦пЁп╫п╟п╩п╬п╪ п╢п╬ я┌п╬пЁп╬ п╨п╟п╨ п╠я▀п╩п╦ п©я─п╬я┤п╦я┌п╟п╫я▀ п╢п╟п╫п╫я▀п╣; я│п╪. signal(7).
fd я│п╡я▐п╥п╟п╫ я│ п╬п╠я┼п╣п╨я┌п╬п╪, п╫п╣ п©я─п╦я│п©п╬я│п╬п╠п╩п╣п╫п╫я▀п╪ п╢п╩я▐ я┤я┌п╣п╫п╦я▐; п╦п╩п╦я└п╟п╧п╩ п╠я▀п╩ п╬я┌п╨я─я▀я┌ я│ п╦я│п©п╬п╩я▄п╥п╬п╡п╟п╫п╦п╣п╪ я└п╩п╟пЁп╟ O_DIRECT, п╦ п╟п╢я─п╣я│, я┐п╨п╟п╥п╟п╫п╫я▀п╧ п╡ buf, п╥п╫п╟я┤п╣п╫п╦п╣, я┐п╨п╟п╥п╟п╫п╫п╬п╣ п╡ count п╦п╩п╦ я┌п╣п╨я┐я┴п╣п╣ я│п╪п╣я┴п╣п╫п╦п╣ п╡ я└п╟п╧п╩п╣, п╦п╪п╣п╣я┌ п╫п╣п╢п╬п©я┐я│я┌п╦п╪п╬п╣ п╡я▀я─п╟п╡п╫п╦п╡п╟п╫п╦п╣.
fd п╠я▀п╩ я│п╬п╥п╢п╟п╫ п╡я▀п╥п╬п╡п╬п╪ timerfd_create(2), п╟ п╡ read() п╠я▀п╩ п©п╣я─п╣п╢п╟п╫ п╫п╣п╡п╣я─п╫я▀п╧ я─п╟п╥п╪п╣я─ п╠я┐я└п╣я─п╟; п©п╬п╢я─п╬п╠п╫п╣п╧ я│п╪. п╡ timerfd_create(2).
п·я┬п╦п╠п╨п╟ п╡п╡п╬п╢п╟/п╡я▀п╡п╬п╢п╟. п²п╟п©я─п╦п╪п╣я─, я█я┌п╬ п©я─п╬п╦я│я┘п╬п╢п╦я┌ п╨п╬пЁп╢п╟ п©я─п╬я├п╣я│я│, п╫п╟я┘п╬п╢я▐я┴п╦п╧я│я▐ п╡ я└п╬п╫п╬п╡п╬п╧ пЁя─я┐п©п©п╣ п©я─п╬я├п╣я│я│п╬п╡, п©я▀я┌п╟п╣я┌я│я▐ п╡я▀п©п╬п╩п╫п╦я┌я▄ я┤я┌п╣п╫п╦п╣ п╦п╥ я│п╡п╬п╣пЁп╬ я┐п©я─п╟п╡п╩я▐я▌я┴п╣пЁп╬ tty, п╦ п╦пЁп╫п╬я─п╦я─я┐п╣я┌ п╦п╩п╦ п╠п╩п╬п╨п╦я─я┐п╣я┌ я│п╦пЁп╫п╟п╩ SIGTTIN п╦п╩п╦ п╤п╣ п╣пЁп╬ пЁя─я┐п©п©п╟ п©я─п╬я├п╣я│я│п╬п╡ п╬я│я┌п╟п╩п╟я│я▄ п╠п╣п╥ я─п╬п╢п╦я┌п╣п╩я▐. п╜я┌п╬ я┌п╟п╨п╤п╣ п╪п╬п╤п╣я┌ я│п╩я┐я┤п╦я┌я▄я│я▐, п╣я│п╩п╦ п©я─п╬п╦п╥п╬я┬п╩п╟ п╫п╦п╥п╨п╬я┐я─п╬п╡п╫п╣п╡п╟я▐ п╬я┬п╦п╠п╨п╟ п╡п╡п╬п╢п╟-п╡я▀п╡п╬п╢п╟ п©я─п╦ я┤я┌п╣п╫п╦я▐ я│ п╢п╦я│п╨п╟ п╦п╩п╦ п╩п╣п╫я┌я▀.
fd я┐п╨п╟п╥я▀п╡п╟п╣я┌ п╫п╟ п╨п╟я┌п╟п╩п╬пЁ.

п°п╬пЁя┐я┌ я┌п╟п╨п╤п╣ п╡п╬п╥п╫п╦п╨п╫я┐я┌я▄ п╢я─я┐пЁп╦п╣ п╬я┬п╦п╠п╨п╦, п╡ п╥п╟п╡п╦я│п╦п╪п╬я│я┌п╦ п╬я┌ п╬п╠я┼п╣п╨я┌п╟, я│п╡я▐п╥п╟п╫п╫п╬пЁп╬ я│ fd. POSIX п©п╬п╥п╡п╬п╩я▐п╣я┌ я│п╦я│я┌п╣п╪п╫п╬п╪я┐ п╡я▀п╥п╬п╡я┐ read(), п╨п╬я┌п╬я─я▀п╧ п╠я▀п╩ п©я─п╣я─п╡п╟п╫ п©п╬я│п╩п╣ я┤я┌п╣п╫п╦я▐ п©п╣я─п╡п╬пЁп╬ п╨я┐я│п╨п╟ п╥п╟п©я─п╬я┬п╣п╫п╫я▀я┘ п╢п╟п╫п╫я▀я┘, п╡п╬п╥п╡я─п╟я┴п╟я┌я▄ -1 (я│ errno, я┐я│я┌п╟п╫п╬п╡п╩п╣п╫п╫п╬п╧ п╡ EINTR) п╦п╩п╦ п╨п╬п╩п╦я┤п╣я│я┌п╡п╬ я┐п╤п╣ п©я─п╬я┤п╦я┌п╟п╫п╫я▀я┘ п╠п╟п╧я┌.

п║п·п·п╒п▓п∙п╒п║п╒п▓п≤п∙ п║п╒п░п²п■п░п═п╒п░п°

SVr4, 4.3BSD, POSIX.1-2001.

п≈п░п°п∙п╖п░п²п≤п╞

п²п╟ я└п╟п╧п╩п╬п╡я▀я┘ я│п╦я│я┌п╣п╪п╟я┘ NFS я┤я┌п╣п╫п╦п╣ п╫п╣п╠п╬п╩я▄я┬п╦я┘ п©п╬я─я├п╦п╧ п╢п╟п╫п╫я▀я┘ п╬п╠п╫п╬п╡п╩я▐п╣я┌ п╬я┌п╪п╣я┌п╨п╦ п╡я─п╣п╪п╣п╫п╦ я┌п╬п╩я▄п╨п╬ п╡ п©п╣я─п╡я▀п╧ я─п╟п╥, п©п╬я│п╩п╣п╢я┐я▌я┴п╦п╣ п╡я▀п╥п╬п╡я▀ п╫п╣ п╢п╣п╩п╟я▌я┌ я█я┌п╬пЁп╬. п╜я┌п╬ п╡я▀п╥п╡п╟п╫п╬ п╨я█я┬п╦я─п╬п╡п╟п╫п╦п╣п╪ п╟я┌я─п╦п╠я┐я┌п╬п╡ я│ п╨п╩п╦п╣п╫я┌я│п╨п╬п╧ я│я┌п╬я─п╬п╫я▀, п©п╬я┌п╬п╪я┐ я┤я┌п╬ п╠п╬п╩я▄я┬п╦п╫я│я┌п╡п╬ (п╣я│п╩п╦ п╫п╣ п╡я│п╣) п╨п╩п╦п╣п╫я┌п╬п╡ NFS п©я─п╣п╢п╬я│я┌п╟п╡п╩я▐я▌я┌ я│п╣я─п╡п╣я─я┐ п╬п╠п╫п╬п╡п╩я▐я┌я▄ st_atime (п╡я─п╣п╪я▐ п©п╬я│п╩п╣п╢п╫п╣пЁп╬ п╢п╬я│я┌я┐п©п╟), п╟ п╥п╟п©я─п╬я│я▀ п╫п╟ я┤я┌п╣п╫п╦п╣, п╨п╬я┌п╬я─я▀п╣ я┐п╢п╬п╡п╩п╣я┌п╡п╬я─я▐я▌я┌я│я▐ п╦п╥ п╨п╩п╦п╣п╫я┌я│п╨п╬пЁп╬ п╨я█я┬п╟, п╫п╣ п╡я▀п╥я▀п╡п╟я▌я┌ п╬п╠п╫п╬п╡п╩п╣п╫п╦я▐ st_atime, п©п╬я┌п╬п╪я┐ я┤я┌п╬ п╢п╟п╫п╫я▀п╣ п╫п╣ я┤п╦я┌п╟я▌я┌я│я▐ я│ я│п╣я─п╡п╣я─п╟. п║п╣п╪п╟п╫я┌п╦п╨п╟ UNIX п╪п╬п╤п╣я┌ п╠я▀я┌я▄ п╢п╬я│я┌п╦пЁп╫я┐я┌п╟ п╥п╟п©я─п╣я┌п╬п╪ п╨я█я┬п╦я─п╬п╡п╟п╫п╦я▐ п╟я┌я─п╦п╠я┐я┌п╬п╡ п╫п╟ я│я┌п╬я─п╬п╫п╣ п╨п╩п╦п╣п╫я┌п╟, п╫п╬ п╡ п╠п╬п╩я▄я┬п╦п╫я│я┌п╡п╣ я│п╩я┐я┤п╟п╣п╡ я█я┌п╬ я┐п╡п╣п╩п╦я┤п╦я┌ п╫п╟пЁя─я┐п╥п╨я┐ п╫п╟ я│п╣я─п╡п╣я─ п╦ я│п╫п╦п╥п╦я┌ п©я─п╬п╦п╥п╡п╬п╢п╦я┌п╣п╩я▄п╫п╬я│я┌я▄.

п°п╫п╬пЁп╦п╣ я└п╟п╧п╩п╬п╡я▀п╣ я│п╦я│я┌п╣п╪я▀ п╦ п╢п╦я│п╨п╦ я─п╟я│я│п╪п╟я┌я─п╦п╡п╟я▌я┌я│я▐ п╨п╟п╨ п╢п╬я│я┌п╟я┌п╬я┤п╫п╬ п╠я▀я│я┌я─я▀п╣ п╦ я─п╣п╟п╩п╦п╥п╟я├п╦я▌ O_NONBLOCK я│я┤п╦я┌п╟я▌я┌ п╫п╣п╫я┐п╤п╫п╬п╧. п÷п╬я█я┌п╬п╪я┐ O_NONBLOCK п╪п╬п╤п╣я┌ п╠я▀я┌я▄ п╫п╣п╢п╬я│я┌я┐п©п╣п╫ п╫п╟ я└п╟п╧п╩п╟я┘ п╦/п╦п╩п╦ п╢п╦я│п╨п╟я┘.

п║п°п·п╒п═п≤п╒п∙ п╒п░п п√п∙

close(2), fcntl(2), ioctl(2), lseek(2), open(2), pread(2), readdir(2), readlink(2), readv(2), select(2), write(2), fread(3)

2009-02-23 Linux