Unix環境高度プログラミング学習ノート3
IO[ , ]
1. unix IO POSIX.1 Single UNIX SPecification , ISO C 。
IO , ISO( )C IO 。
2. , [ ] 。 , 。
3. 0 1 2
, :STDIN_FILENO STDOUT_FILENO STDERR_FILENO.
0~OPEN_MAX,
4.
#include <fcntl.h>
int open(const char * pathname, int oflag, ... /*mode_t mode*/);
// oflag: O_RDONLY O_WRONLY O_RDWR
// O_APPEND O_CREAT O_DSYNC O_EXCL O_NOCTTY
// O_NONBLOCK O_RSYNC O_SYNC O_TRUNC
// mode: S_IS[UG]ID, S_ISVTX, S_I[RWX](USR|GRP|OTH)
// *****************************************************
//
oflag , ,
, O_CREAT O_EXCL, ,
5.
#include <fcntl.h>
int create(const char *pathname, mode_t mode);
// mode: S_IS[UG]ID, S_ISVTX, S_I[RWX](USR|GRP|OTH)
open(pathname, O_WRONLY |O_CREAT | O_TRUNC, mode);
6.
#include <unistd.h>
int close(int filedes);
6.1
6.2 ,
7.
#include <unistd.h>
off_t lseek(int filedes, off_t offset, int whence);
7.1 off_t C fseek(FILE * fd, long offset, int whence); long
7.2 、FIFO、 , -1, errno ESPIPE
7.3 , -1, 0
7.4 , ,
, ,
8.
#include <unistd.h>
ssize_t read(int filedes, void * buf, size_t nbytes);
// : , 0, -1
8.1 nbytes :
+ , , 0
+ ,
+ socket
+ FIFO
+
9.
#include <unistd.h>
ssize_t write(int filedes, const void * buf, size_t nbytes);
// : , -1
9.1 nbytes , , ,
10 IO
read write , ,
nbytes IO , 4096[ ext2 ] ,
,
11.
11.1 UNIX 。
11.2 ,
+ [fd| ( )]
+ [ | |v ]
+ v [v |i | ]
11.3
+ , v , inode
:
, ,
11.4
#include <unistd.h>
int dup(int filedes);
#include <unistd.h>
int dup2(int filedes, int filedes2);
+ dup ,dup2 filedes filedes2
+ dup
:
+
12
12.1 ,[ IO , ?] IO , , , , , , IO-- 。
12.2 , :
+
#include <unistd.h>
int fsync(int filedes);
filedes , 。 。
+
#include <unistd.h>
int fdatasync(int filedes);
filedes , 。 。
+
#include <unistd.h>
void sync(void);
, 。update 30 ,sync 。
13.
13.1 :
#include <fcntl.h>
int fcntl(int filedes, int cmd, ... /* int arg */);
// cmd: F_DUPFD, F_GETFD, F_SETFD, F_GETFL, F_SETFL
// F_GETOWN, F_SETOWN, F_GETLK, F_SETLK, F_SETLKW
, , 。
FD_CLOEXEC exec 。
fcntl
14. IO
14.1 ioctl
#include <unistd.h>
#include <sys/ioctl.h>
#include <stropts.h>
int ioctl(int filedes, int request, ...);
iocntl . [ ] 。
ioctl STREAMS I/O.
15. /dev/fd/n n
[ ]http://blog.csdn.net/kangquan2008
〔転載は表明してください〕http://blog.csdn.net/kangquan2008