文件I-O

文件I-O - 1 、...

Info iconThis preview shows page 1. Sign up to view the full content.

View Full Document Right Arrow Icon
This is the end of the preview. Sign up to access the rest of the document.

Unformatted text preview: 1 、 Linux 、、、、、、、 I/O 1.1 、 Linux 、、、、 Linux 、、、、、、、、、、、、、、、、、、、、、、“、、”、、、、、、、、、、、、、“、、”、、、、、、、、、、 、、、、、、、、、、、、、、、、、、、、、、“、、”、、、、、、、、、、、、、“、、”、、、、、、、、、、 、、、、、、、、、 、 linux 、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、 、、、、、、、、、、、、、、、、、、、、、、、、、、、、 www.chinaeda.cn 2.1 、、、、、、、、 API 、 、 linux 、、、、、、、、 API 、、、、、 UNIX 、、、、、、、、、 、、、、— POSIX 、、、、、、、、、、、、、、、、、 C 、、 libc 、、、、、 www.chinaeda.cn 、、、、 、、、、 、、、、、、 API 、、、、 、、、、 、 1 、、、、、 API 、、、、、、、、、、 www.chinaeda.cn 2.1 、、 I/O 、、 、、、、、 I / O 、、——、、、、、、、、、、、、、、、、、、 linux 、、 I / O 、、、、 5 、、、、 open 、 read 、 write 、 lseek 、、 close 、 、、、、、、、、、 r e a d 、 w r i t e 、、、、、、、、、、、、、、、、、 、、、、 I / O 、、、、 ANSI C 、、、、、、、、 P O S I X 、、、、、 www.chinaeda.cn 2.2 、、、、、 、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、 、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、 o p e n 、 c r e a t 、、、、、、、、、、、、、、、、、、、、、、、 r e a d 、 w r i t e 、 www.chinaeda.cn 、 P O S I X . 1 、、、、、、、、 0 、 1 、 2 、、、、、、、、、 STDIN_FILENO 、 STDOUT_FILENO 、 STDERR_FILENO 、 O 、、、、、、、、、、、、 <unistd.h> 、、 、、、、、、、、、 0 ~ OPEN_MAX 、、、、 UNIX 、、 、、、、、、、 1 9 ( 、、、、、、、、 2 0 、、、 ) 、、、、、、、、、、、、、 6 3 、 www.chinaeda.cn 2.3 open 、、 2.3 #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> int open(const char *pathname, int oflag, int …/*, mode_t mode * / ) ; …/*, 、、、、、、、、、、、、、、、、、 - 1 www.chinaeda.cn pathname 、、、、、、、、、、、、、、 pathname oflag 、、、、、、、、、、、、、、、、、 oflag 、、 open 、、、、、、、、、、、、、、、、、、、、、、 、、 、、、、、、、、、、、、、、、、、 oflag 、、 ( 、、、、、、、 <fcntl.h> 、、、、 ) 、 、、、、、、、、、、、、、、、、、 O_RDONLY 、、、、、 O_WRONLY 、、、、、 O_RDWR 、、、、、、 www.chinaeda.cn O_APPEND 、、、、、、、、、、、、、 、、、、、、、、、、、、、 O_CREAT 、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、 mode 、、、、、、、、、、、、、、 、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、 、、、 O_EXCL 、、、、、、、 O_CREAT 、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、 、、、、、、、 、、、、、、、、、、、、、、 O_TRUNC 、、、、、、、、、、、、、、、、、、、、、、、、、、、、、 0 、 、、、、、、、、、、、、、、、、、、、、、、、、、、、、、 O_NOCTTY 、、 p a t h n a m e 、、、、、、、、、、、、、、、、、、、、、、、、、、、 、、 O_NONBLOCK 、、 p a t h n a m e 、、、、、 F I F O 、、、、、、、、、、、、 、、 、、、、、、、、、、、、、、、、、、、、、、、、、、 I / O 、、、、、、、、、 O_SYNC 、、、 w r i t e 、、、、、 I / O 、、、、、 、、、 www.chinaeda.cn 2.4 creat 、、 2.4 、、 creat 、、、、、、、、、、 #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> int creat(const char * pathname, mode_t m o d e) ; 、、、、、、、、、、、、、、、、、、、、、、 - 1 、 、、、、、、、、、、 open (pathname, O_WRONLY | O_CREAT | O_TRUNC, mode) ; c r e a t 、、、、、、、、、、、、、、、、、、、、、、、 www.chinaeda.cn 2.5 close 、、 2.5 、、 close 、、、、、、、、、、、 #include <unistd.h> int close (int filedes) 、 、、、、、、、 0 、、、、、 - 1 、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、 c l o s e 、、、、、、、、 、、、 open.c www.chinaeda.cn 2.6 lseek 、、 2.6 、、、、、、、、、、、、、、、、“、、、、、、、”、、、、、、、、、、、、、、、、、、、、、、、、、、、 、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、 O_APPEND 、、、、、、、、、、、、、、 0 、 、、、、 l s e e k 、、、、、、、、、、、、 www.chinaeda.cn #include <sys/types.h> #include <unistd.h> off_t lseek(int filesdes, off_t offset, int whence) ; 、、、、、、、、、、、、、、、、、、 - 1 、 、、、 offset 、、、、、、 w h e n c e 、、、、、 、 whence 、 SEEK_SET 、、、、、、、、、、、、、、、、、、、 offset 、、、、 、 whence 、 SEEK_CUR 、、、、、、、、、、、、、、、、、、 offset , offset 、、、、、、 、 whence 、 SEEK_END 、、、、、、、、、、、、、、、、、、 offset , offset 、、、、、、 www.chinaeda.cn 、 l s e e k 、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、 、、、、、、 off_t curr_pos; Curr_pos = lseek(fd, 0, SEEK_CUR); www.chinaeda.cn 2.7 read 、、 、 r e a d 、、、、、、、、、、、 #include <unistd.h> ssize_t read(int feledes, void *buff, size_t nbytes) ; 、、、、、、、、、、、、、、、、、 0 、、、、、 - 1 、 、 r e a d 、、、、、、、、、、、、、、、、、、、、、、、、、、 0 、 www.chinaeda.cn 、、、、、、、、、、、、、、、、、、、、、、、、 、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、 3 0 、、、、、、、、 1 0 0 、、、、 、 r e a d 、、 3 0 、、、、、、、 r e a d 、、、、、、 0 ( 、、、、 ) 、 、、、、、、、、、、、、、、、、、、 ( 、 11 、、、、、、、、、、、 ) 、 、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、 、、、、、、、、、、、、、、、、、、、、、、、、、、 、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、 www.chinaeda.cn 2.8 write 、、 2.8 、 w r i t e 、、、、、、、、、、、 #include <unistd.h> ssize_t write(int filedes, const void * buff, size_t nbytes) ; 、、、、、、、、、、、、、、、、、、 - 1 、 、、、、、、、、、 nbytes 、、、、、、、、、、、、 w r i t e 、、、、、、、、、、、、、、、 、、、、、、、、、、、、、、、、、、、、、、 www.chinaeda.cn 、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、 O _ A P P E N D 、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、 、、、、、、、、、、、、、、、、、、、 、、、 write.c www.chinaeda.cn 2.9 fcntl 、、 2.9 fcntl 、、、、、、、、、、、、、、、 #include <sys/types.h> #include <unistd.h> #include <fcntl.h> int fcntl(int filedes, int cmd, ... ) ; 、、、、、、、、、、 cmd( 、、 ) 、、、、、 - 1 、 www.chinaeda.cn f c n t l 、、、、、、、、 、、、、、、、、、、 , 、、、、、、、、、、、、 (c m d 、 F_DUPFD 、、 、、 / 、、、、、、、、、 , 、、、 filedes 、、、、、、、、、、、、、、、、、 c m d = F_GETFD 、 F_SETFD 、、 、、 / 、、、、、、、、、、、、 filedes 、、、、、、、、、、、、、、、、 c m d = F_GETFL 、 F_SETFL 、、 、、 / 、、、、 I / O 、、、 c m d = F_GETOWN 、 F_SETOWN 、、 、、 / 、、、、、、 c m d = F_SETLK , F_SETLKW 、、 www.chinaeda.cn 、、、、 、、、、 O_RDONLY 、、、、 O_WRONLY 、、、、 O_RDWR 、 / 、、、 O_APPEND 、、、、、、、、、 O_NONBLOCK 、、、、、 O_SYNC 、、、、、 O_ASYNC 、、 I / O www.chinaeda.cn F_SETFL 、、、、、、、、、、、、、、、、、 ( 、、、、、 ) 、、、、、、、、、、、、 O _ APPEND、O_NONBLOCK、O_SYNC 、O_ASYNC、 F_GETOWN 、、、、、 S I G I O 、 S I G U R G 、、、、、 I D 、、、、 I D 、 F_SETOWN 、、、、 S I G I O 、 S I G U R G 、、、、、 I D 、、、、 I D 、、、 a rg 、、、、、 、 I D 、、、 a rg 、、、、 a rg 、、、、、、、、、 I D、 www.chinaeda.cn 2.9.2 、 fcntl 、、、、、 2.9.2 、、、、、、、、、、、、、、、、、、、、 linux 、、、、、、、、、、、、、、、、、、、、 、、、、、、、、、 、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、 、、、、、、、、、、、、、、 Fcntl 、、、、、、、、、、、、、、、、、、、、、 www.chinaeda.cn 2.9.3 fcntl 、、、、 #include <sys/types.h> #include <unistd.h> #include <fcnt1.h> int fcnt1(int filedes, int cmd,... struct flock flockptr ) ; struct flock 、、 www.chinaeda.cn 2.9.4 f l o c k 、、、、、 、、、、、、、、 F_RDLCK 、、、、、、、 F_WRLCK 、、、、、、、、 F_UNLCK 、、、、、、、、 、、、、、、、、、、、、、、、、 l_start 、 l_whence 、、、、、 l_stat 、、、、、、、、 、、、 l_whence 、、、、、、、、、、、、、 、、、、、、、 l_len 、、、 www.chinaeda.cn 、、、、、、、、、、、、、、、、、、、、、 、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、 、、 l_len 、 0 、、、、、、、、、、、、、、 l_start 、 l_whence 、、、、、、 、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、 、、、、、、、、、、、、、、、 l_start 、、、 0 、 l_whence 、、、 SEEK_SET 、 l_len 、、、 0 、 www.chinaeda.cn 2.10 ioctl 、、 2.10 ioctl 、、、 I / O 、、、、、、、、、、、、、、、、、、、、 I / O 、、、、 、、、 i o c t l 、、、、、 I / O 、 ioctl 、、、、、、、、、、、、、、、 I / O 、、、 #include <unistd.h> /* SVR4 */ #include <sys/ioctl.h> /* 4.3+BSD * / int ioctl(int filedes, int request, . . . ) ; 、、、、、、、、 - 1 、、、、、、、、、、 www.chinaeda.cn 3 、 select 、、 I/O 、、 select 、、 3.1 I/O 、、、、、、、 a. 、、 I/O 、、、、、、、、 I/O 、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、 、、、、、、、、、、、、 b. 、、、、、、、、、、 I/O 、、、、、、、、、、、、、、、、、、、、、、、、、、、 open 、 read 、 write 、、、 c. I/O 、、、、、、、、、、、、 I/O 、、、、、、、、、、、、、 I/O 、、、、、、、、、、、、 I/O 、、、、、、、、、、、、、 、、、、、、 I/O 、、、、、、、、、、、 select 、、、 、、、、、、 I/O www.chinaeda.cn d. e. 、、、、 I/O 、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、 、、、、、、 I/O 、 、、 I/O 、、、、、、、、、、、、、、、、、、、、、、、、、 I/O 、、、、、、、、、、 、、、、、、、、、、、、、、、、、、、 www.chinaeda.cn 3.2 select 、、 、、 select 、、、、、、、、 (1) 、、、、、、、、、、 (2) 、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、 、、、、 (3) 、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、 、 s e l e c t 、、、、、、、、、、、 (1) 、、、、、、、、、、、、 (2) 、、、、、、、、、、、、、、、、、、、 www.chinaeda.cn #include <sys/types.h>/* fd_set data type */ #include <sys/time.h> /* struct timeval */ #include <unistd.h> /* function prototype might be here */ int select (int numfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval * timeout) ; 、、、、、、、、、、、、、、、、、、 0 、、、、、、 - 1 、 www.chinaeda.cn timeout 、、 NULL 、、、、、、、、、、、、、、、、、、、、、、、、、、 NULL 、、、、 struct timeval 、、、、、、、、、、 timeout 、、、、、、 、、、、、、、、、、、、、、 0 、、、、、、、、、、、、 、、、、、、、、、、 www.chinaeda.cn 、、、、、、、、、、、、、、、、、、、、、 struct timeval { long tv_sec; /* seconds */ long tv_usec; /* and microseconds */ }、 www.chinaeda.cn select 、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、 4 、、、、、 select FD_ZERO(fd_set *set) 、、、、、、、、、、、 FD_ZERO(fd_set 、、、、、、、、、、、 FD_SET(int fd, fd_set *set) 、、、、、、、、、、、、、、、、、、 FD_SET(int 、、、、、、、、、、、、、、、、、、 FD_CLR(int fd, fd_set *set) 、、、、、、、、、、、、、、、、、、、 FD_CLR(int 、、、、、、、、、、、、、、、、、、、 FD_ISSET(int fd, fd_set *set) 、、、、、、、、、、、、、、、、、 FD_ISSET(int 、、、、、、、、、、、、、、、、、 www.chinaeda.cn 、、、 select 、、、、、、、、、 FD_ZERO 、 FD_SET 、 、、、 、、、、、、、、、 , 、、、 select 、、、、、、、、、 FD_ISSET 、、、、、、 、 、、、、、、、、、、、、、、、、 、、 FD_CLR 、、、、、、、、 、、、、 select.c www.chinaeda.cn ...
View Full Document

This note was uploaded on 11/23/2011 for the course CS Linux taught by Professor Linfang during the Summer '06 term at Fudan University.

Ask a homework question - tutors are online