码迷,mamicode.com
首页 > 其他好文 > 详细

unix环境编程 文件操作

时间:2014-05-20 16:07:29      阅读:269      评论:0      收藏:0      [点我收藏+]

标签:unix   文件操作   文件信息   文件类型   文件读写   

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;
}


unix环境编程 文件操作,布布扣,bubuko.com

unix环境编程 文件操作

标签:unix   文件操作   文件信息   文件类型   文件读写   

原文地址:http://blog.csdn.net/u011608357/article/details/26086411

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!