1. 文件的打开读写 关闭
int open(const char *pathname,int flag,…) 打开一个文件
成功则返回文件描述符,若出现则返回-1
flag可以取下面的常量
O_RDONLY 只读打开
O_WRONLY 只写打开
O_RDWR 读写打开
其它的常量 O_APPEND,O_CREAT,O_EXCL,O_TRUNC,O_NOCTTY,O_NONBLOCK是可选的。
int create(const char *pathname,mode_t mode) 创建一个文件
若成功则返回为只写打开的而文件描述符,若出现错误则返回-1
int close(int fd) 关闭一个文件
若成功则返回0,若出错则返回-1
ssize_t read(int fd,void *buf,size_tnbytes) 读文件
如果读取成功,则返回读到的字节数,如果出错则返回-1
ssize_t write(int fd,vonst void *buf,size_tnbytes) 写文件
若成功则返回已写的字节数,若出错则返回-1
复制一个现存的文件描述符
int dup(int fd)
int dup2(int fd1,int fd2)
若成功则返回新的文件描述符,若出错返回-1;
改变已经打开的文件的性质
int fcntl(int fd,int cmd,…)
2.文件的信息、类型等
int stat(const char *restrictpathname,struct stat *restrict buf) 显示文件信息
int fstat(intfd,struct stat *buf)
int lstat(constchar *restrict pathname,struct stat *restrict buf)
<sys/stat.h>中的文件类型宏
S_ISREG() 普通文件 S_ISDIR() 目录文件 S_ISCHR() 字符特殊文件 S_ISBLK() 块特殊文件 S_IFIFO() 管道或者FIFO S_ISLNK()符号链接 S_ISSOCK() 套接字
int utime(constchar *pathname,const struct utimebuf *times) 更改文件的访问和修改时间
若成功则返回0,若出错则返回-1
3文件的访问权限和长度
int access(constchar *pathname,int mode) 测试用户是否具有某种权限
若成功则返回0,若出错则返回-1
mode_tumask(mode_t cmask) 为进程设置文件模式创建屏蔽字,并返回以前的值
chmod(const char*pathname,mode_t mode) 改变文件的访问权限
int fchmod(intfd,mode_t mode)
若成功则返回0,若出错则返回-1
int chown(constchar *pathname,uid_t owner,gid_t group) 改变文件所有者
int fchown(intfd,uid_t owner,gid_t group)
int ichown(constchar *pathname,uid_t owner ,gid_t group)
若成功则返回0,出错则返回-1
inttruncate(const char *pathname,off_t length) 文件截断
int ftruncate(intfd,off_t length)
若成功则返回0,若出错则返回-1
4 文件的链接和删除
int link(constchar *existingpath,const char *newpath) 创建文件的链接
若成功则返回0,若出错则返回-1
int unlink(constchar *pathname) 删除一个目录项
若成功则返回0,若出错则返回-1
int remove(constchar *pathname) 解除对一个文件或者目录的链接
若成功则返回0,若出错则返回-1
int rename(constchar *oldname,const char *newname) 文件或者目录更名
若成功则返回0,若出错则返回-1
int symlink(constchar *actualpath,const char *sympath) 创建一个符号链接
若成功返回0,若出错则返回-1
ssize_treadlink(const char *restrict pathname,char *restrict buf,size_t bufsize) 打开链接本身
若成功则返回读到的字节数,若出错则返回-1
5.下面的程序打开文件的前n个字节
# include<stdio.h> # include <unistd.h> int main(int argc,char **argv) { int fd; if(argc!=3) { printf("argument error\n"); return -1; } int n=atoi(argv[1]); //字节数存放在 argv[1] char *buf=(char *)malloc((n+1)*sizeof(char)); if((fd=open(argv[2],O_RDONLY))<0) //文件名存放在argv[2] { perror("open"); return -1; } if(read(fd,buf,n)<0) { perror("read"); return -1; } buf[n]=‘\0‘; printf("%s\n",buf); return 0; }
6.下面的程序判断文件的类型
# include <stdio.h> # include <unistd.h> # include <sys/stat.h> int main(int argc,char **argv) { int i; struct stat buf; char *ptr; int err=lstat(argv[1],&buf); //文件名存放在argv[1] if(err<0) { perror("lstat"); return -1; } if(S_ISREG(buf.st_mode)) { ptr="regular file"; } else if(S_ISDIR(buf.st_mode)) { ptr="directory"; } else if(S_ISCHR(buf.st_mode)) { ptr="character file"; } else if(S_ISBLK(buf.st_mode)) { ptr="block file"; } else if(S_ISFIFO(buf.st_mode)) { ptr="fifo"; } else if(S_ISLNK(buf.st_mode)) { ptr="sysmbolic link"; } else if(S_ISSOCK(buf.st_mode)) { ptr="socket"; } else ptr="unkown mode"; printf("%s\n",ptr); return 0; }