jixuduxing

linux学习笔记(2)

linux下io操作学习:

close(关闭文件)
相关函数  open,fcntl,shutdown,unlink,fclose
 
表头文件  #include<unistd.h>
 
定义函数  int close(int fd);
 
函数说明  当使用完文件后若已不再需要则可使用close()关闭该文件,二close()会让数据写回磁盘,并释放该文件所占用的资源。参数fd为先前由open()或creat()所返回的文件描述词。
 
返回值  若文件顺利关闭则返回0,发生错误时返回-1。
 
错误代码  EBADF 参数fd 非有效的文件描述词或该文件已关闭。
 
附加说明  虽然在进程结束时,系统会自动关闭已打开的文件,但仍建议自行关闭文件,并确实检查返回值。



 
creat(建立文件)  
相关函数  read,write,fcntl,close,link,stat,umask,unlink,fopen
 
表头文件  #include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
 
定义函数  int creat(const char * pathname, mode_tmode);
 
函数说明  参数pathname指向欲建立的文件路径字符串。Creat()相当于使用下列的调用方式调用open()
open(const char * pathname ,(O_CREAT|O_WRONLY|O_TRUNC));
 
错误代码  关于参数mode请参考open()函数。
 
返回值  creat()会返回新的文件描述词,若有错误发生则会返回-1,并把错误代码设给errno。
EEXIST 参数pathname所指的文件已存在。
EACCESS 参数pathname 所指定的文件不符合所要求测试的权限
EROFS 欲打开写入权限的文件存在于只读文件系统内
EFAULT 参数pathname 指针超出可存取的内存空间
EINVAL 参数mode 不正确。
ENAMETOOLONG 参数pathname太长。
ENOTDIR 参数pathname为一目录
ENOMEM 核心内存不足
ELOOP 参数pathname有过多符号连接问题。
EMFILE 已达到进程可同时打开的文件数上限
ENFILE 已达到系统可同时打开的文件数上限
 
附加说明  creat()无法建立特别的装置文件,如果需要请使用mknod()。


 
lseek(移动文件的读写位置)  
相关函数  dup,open,fseek
 
表头文件  #include<sys/types.h>
#include<unistd.h>
 
定义函数  off_t lseek(int fildes,off_t offset ,int whence);
 
函数说明  每一个已打开的文件都有一个读写位置,当打开文件时通常其读写位置是指向文件开头,若是以附加的方式打开文件(如O_APPEND),则读写位置会指向文件尾。当read()或write()时,读写位置会随之增加,lseek()便是用来控制该文件的读写位置。参数fildes 为已打开的文件描述词,参数offset 为根据参数whence来移动读写位置的位移数。
 
参数  whence为下列其中一种:
SEEK_SET 参数offset即为新的读写位置。
SEEK_CUR 以目前的读写位置往后增加offset个位移量。
SEEK_END 将读写位置指向文件尾后再增加offset个位移量。
当whence 值为SEEK_CUR 或SEEK_END时,参数offet允许负值的出现。
下列是教特别的使用方式:
1) 欲将读写位置移到文件开头时:lseek(int fildes,0,SEEK_SET);
2) 欲将读写位置移到文件尾时:lseek(int fildes,0,SEEK_END);
3) 想要取得目前文件位置时:lseek(int fildes,0,SEEK_CUR);
 
返回值  当调用成功时则返回目前的读写位置,也就是距离文件开头多少个字节。若有错误则返回-1,errno 会存放错误代码。
 
附加说明  Linux系统不允许lseek()对tty装置作用,此项动作会令lseek()返回ESPIPE。
 
范例  参考本函数说明 

 
flock(锁定文件或解除锁定)  
相关函数  open,fcntl
 
表头文件  #include<sys/file.h>
 
定义函数  int flock(int fd,int operation);
 
函数说明  flock()会依参数operation所指定的方式对参数fd所指的文件做各种锁定或解除锁定的动作。此函数只能锁定整个文件,无法锁定文件的某一区域。
 
参数  operation有下列四种情况:
LOCK_SH 建立共享锁定。多个进程可同时对同一个文件作共享锁定。
LOCK_EX 建立互斥锁定。一个文件同时只有一个互斥锁定。
LOCK_UN 解除文件锁定状态。
LOCK_NB 无法建立锁定时,此操作可不被阻断,马上返回进程。通常与LOCK_SH或LOCK_EX 做OR(|)组合。
单一文件无法同时建立共享锁定和互斥锁定,而当使用dup()或fork()时文件描述词不会继承此种锁定。
 
返回值  返回0表示成功,若有错误则返回-1,错误代码存于errno。


 
open(打开文件)  
相关函数  read,write,fcntl,close,link,stat,umask,unlink,fopen
 
表头文件  #include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
 
定义函数  int open( const char * pathname, int flags);
int open( const char * pathname,int flags, mode_t mode);
 
  #include<unistd.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
main()
{
int fd,size;
char s [ ]=”Linux Programmer!\n”,buffer[80];
fd=open(“/tmp/temp”,O_WRONLY|O_CREAT);
write(fd,s,sizeof(s));
close(fd);
fd=open(“/tmp/temp”,O_RDONLY);
size=read(fd,buffer,sizeof(buffer));
close(fd);
printf(“%s”,buffer);
}
 
执行  Linux Programmer!

read(由已打开的文件读取数据)  
相关函数  readdir,write,fcntl,close,lseek,readlink,fread
 
表头文件  #include<unistd.h>
 
定义函数  ssize_t read(int fd,void * buf ,size_t count);
 
函数说明  read()会把参数fd 所指的文件传送count个字节到buf指针所指的内存中。若参数count为0,则read()不会有作用并返回0。返回值为实际读取到的字节数,如果返回0,表示已到达文件尾或是无可读取的数据,此外文件读写位置会随读取到的字节移动。
 
附加说明  如果顺利read()会返回实际读到的字节数,最好能将返回值与参数count 作比较,若返回的字节数比要求读取的字节数少,则有可能读到了文件尾、从管道(pipe)或终端机读取,或者是read()被信号中断了读取动作。当有错误发生时则返回-1,错误代码存入errno中,而文件读写位置则无法预期。
 
错误代码  EINTR 此调用被信号所中断。
EAGAIN 当使用不可阻断I/O 时(O_NONBLOCK),若无数据可读取则返回此值。
EBADF 参数fd 非有效的文件描述词,或该文件已关闭。
 
范例  参考open()。
 

 
write(将数据写入已打开的文件内)  
相关函数  open,read,fcntl,close,lseek,sync,fsync,fwrite
 
表头文件  #include<unistd.h>
 
定义函数  ssize_t write (int fd,const void * buf,size_t count);
 
函数说明  write()会把参数buf所指的内存写入count个字节到参数fd所指的文件内。当然,文件读写位置也会随之移动。
 
返回值  如果顺利write()会返回实际写入的字节数。当有错误发生时则返回-1,错误代码存入errno中。
 
错误代码  EINTR 此调用被信号所中断。
EAGAIN 当使用不可阻断I/O 时(O_NONBLOCK),若无数据可读取则返回此值。
EADF 参数fd非有效的文件描述词,或该文件已关闭。
 
范例  请参考open()。

posted on 2010-05-05 09:37 高磊 阅读(222) 评论(0)  编辑 收藏 引用


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


导航

<2010年5月>
2526272829301
2345678
9101112131415
16171819202122
23242526272829
303112345

统计

常用链接

留言簿

随笔档案

文章档案

搜索

最新评论

阅读排行榜

评论排行榜