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