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


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值