系统编程--文件函数

2020-08-06  本文已影响0人  魔芋辣椒

一、open

#include<unistd.h>
#include<fcntl.h>

int open(char *path,int flags)

int open(char *path,int flags,mode_t mode) //创建文件时使用,mode为0777等权限值

O_RDONLY | O_WRONLY|O_RDWR
O_CREAT | O_APPEND|O_EXCL|O_NOBLOCK|O_TRUNC
创建文件        追加        是否存在     是否阻塞     文件清空

printf(errno);
strerror(errno);

二、read

  ssize_t read(int fd,void *buf,size_t count)

返回读取的数量,若读完返回0,错误返回-1
实例

char buff[1024];
int fd1=open(argv[1],O_RDONLY);
int fd2=open(argv[1],O_RDWR |O_CREAT | O_TRUNC,0644);

while((n=read(fd,buff,1024))!=0){
    write(fd,buff,n);
}

三、write

  ssize_t read(int fd,const void *buf,size_t count)

四、perror

#include <stdio.h>

void perror(const char *s);

五、exit

#include<stdlib.h>

void exit(int x);

六、fcntl

读取文件的状态位图
F_GETFL \\返回位图
F_SETFL \\返回是否成功
int flgs=fcntl(fd,F_GETFL)

int flgs=fcntl(STDIN_FILENO,F_GETFL);

flgs |=O_NONBLOCK;

int ret=fcntl(STDIN_FILENO,F_SETFL,flgs);   \\给0号文件设置非阻塞状态

七、lseek

//原型 返回类型为矢量偏移值
//whence 可取SEEK_SET    SEEK_CUR    SEEK_END
 off_t lseek=(int fd,off_t offset,int whence);

//获取文件大小
int length=lseek(fd,0,SEEK_END);

//拓展文件大小
lseek(fd,111,SEEK_END);
write(fd,'\0',1);                             //不写入则会导致文件大小不变

八、stat

查看文件属性

////statbuf 为传出指针,传入后执行完,给statbuf赋值
#include<sys/stat.h>
 int stat(const char *pathname, struct stat *statbuf);

struct stat  buff;
stat(" ".&buff);

/*
 struct stat {
               dev_t     st_dev;         / ID of device containing file 
               ino_t     st_ino;           /Inode number 
               mode_t    st_mode;         /File type and mode 
               nlink_t   st_nlink;      / Number of hard links 
               uid_t     st_uid;          /User ID of owner 
               gid_t     st_gid;          /Group ID of owner 
               dev_t     st_rdev;         /Device ID (if special file) 
               off_t     st_size;        / Total size, in bytes 
               blksize_t st_blksize;     /Block size for filesystem I/O 
               blkcnt_t  st_blocks;      / Number of 512B blocks allocated 
}
*/

九、execlp

execlp("命令,如ls","同一如ls不可省略","参数,如-l",NULL);
//NULL为哨兵,不可省略

执行到此后,后面的代码均失效,不执行

十、dup2

/重定向,将新的文件描述符指向旧的文件

dup2(int oldfileno,int newfileno);

//如不想从标准输入读取,想从文件读取
dup2(oldfno,STDIN_FILENO);

十、ftruncate

int ftruncate(int fd, off_t length);
//拓展文件大小

十、unlink

int unlink(char* filename);
//删除文件,若文件还在被使用,则先取消链接,等待其使用完后删除
上一篇下一篇

猜你喜欢

热点阅读