文件类型

r读read
w写write
x执行execute

-

普通文件

文本文件 cat命令可查看
二进制文件 cat本身,Linux可执行文件

文本文件 cat命令可查看
二进制文件 cat本身,Linux可执行文件

l

链接文件

硬链接文件和符号链接文件;指针实现不同文件系统之间建立一种链接关系

 

c

字符设备文件

设备文件

设备文件

b

块设备文件

p

管道文件

Linux进程间通信。匿名管道和命名管道

s

套接口文件

socket不同近算计的进程间的通信(套接字)
流式套接口:TCP套接口(面向连接的套接口)
数据报套接口:UDP套接口(无连接套接口)
原始套接口:SOCK_RAW

d

目录文件

系统进行修改

系统进行修改

文件重定向

0标准输入,默认键盘可其他

1标准输出默认屏幕可文件;2标准出错,默认屏幕可文件

重定向标准输出

 

command > filename

把标准输出重定向到filename文件中

ls -l > file

command >> filename

把标准输出重定向到filename文件中,方式是追加在现有内容后面

command 1 filename

把标准输出重定向到一个文件中

> myfile

创建一个长度为0的空文件

重定向标准输入

command < filename

以filename文件的内容作为command命令的标准输入

cat < from > to

command < file1 > file2

一file1文件的内容作为command命令的标准输入,并以file2文件作为命令执行结果的标准输出

command << delimiter

从标准素如中读入,直至遇到delimiter分界符

重定向标准出错

command 2> filename

把标准出错重定向到filename中

command 2>> filename

把标准出错重定向追加到文件中

文件创建打开关闭

//只有含‘写’的不存在的文件会新建,其他会报错  
  
//r只读;w只写;a尾增(附加/写);文本ASCII  
//rb读;wb写;ab尾增;二进制  
//以下读写↓  
//r+;w+;a+;文本ASCII  
//rb+;wb+;ab+二进制 

#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>

int open(const char *pathName,int flags)

返回-1出错,成功返回文件描述符fd

int open(const char *pathName,int flags,mode_t mode)

地址,文件打开方式,指定创建文件权限

#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>

int creat(const char*pathName,mode_t mode)

creat->close->open

返回-1出错

等效open(pathName,O_RDWR|O_CREAT|O_TRUNC,mode)

#include<unistd.h>

int close(int fd);

fd需要关闭的文件的描述符

成功返回0,出错返回-1

文件定位

#include<sys/types/h>
#include<unistd.h>

off_t lseek(int fd,off_t offset,int whence)

fd文件描述符;offset偏移量字节数;whence偏移计算起始位置

出错-1,否则文件偏移量

whence :SEEK_SET文件开始处,SEEK_CUR当前位置,SEEK_END文件结尾

文件读写

#include<unistd.h>

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

fd文件描述符;buf指针缓冲区;count要读取的字节数

出错-1,读到文件尾返回0

#include<unistd.h>

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

fd文件描述符;buf指针缓冲区;count要写入取的字节数

出错-1,否则返回成功写入字节数

改变文件访问权限

#include<sys/types.h>
#include<sys/stat.h>

int chmod(const chat *pathName,mode_t mode)

出错-1,成功0

int fchmod(int fd,mode_t mode)

对已打开进行操作

改变文件所有者

#include<sys/types/h>
#include<unistd.h>

int chown(const char*pathName,uid_t owner,gid_t group)

owner所有者标识符,group表四组标识号

int fchown(int fd,uid_t owner,gid_t group)

已打开

出错-1成功0

int lchown(const char*pathname,uid_t owner ,gid_t group)

针对符号链接文件爱你

重命名

#include<stdio.h>

int rename(const char*oldname,const char*newname)

newname已存在删除

修改文件长度

#include<sys/types/h>
#include<unistd.h>

int truncate(const char *pathName,off_t len)

出错-1成功0

int truncate(int fd,off_t len)

其他

#include<sys/types.h>
#include<sys/stat.h>

int stat(const char*pathName,strut stat*sbuf)

int fstat(int fd,stuct stat*sbuf)

成功返回0,出错返回-1

int lstat(const char*pathName,struct stat*sbuf)

UNIXLinux常见基本系统数据类型

类型                 说明

struct stat {

caddr_t          核心地址

        mode_t     st_mode;       //文件对应的模式,文件,目录等

clock_t          时钟滴答计数器(进程时间)

        ino_t      st_ino;       //inode节点号

comp_t           压缩的时钟滴答

        dev_t      st_dev;        //设备号码

dev_t           设备号

        dev_t      st_rdev;       //特殊设备号码

fd_set           文件描述符集

        nlink_t    st_nlink;      //文件的连接数

fpos_t           文件位置

        uid_t      st_uid;        //文件所有者

gid_t           数值组ID

        gid_t      st_gid;        //文件所有者对应的组

ino_t           i节点编号

        off_t      st_size;       //普通文件,对应的文件字节数

mode_t           文件类型,文件创建模式

        time_t     st_atime;      //文件最后被访问的时间

nlink_t           目录项的链接计数

        time_t     st_mtime;      //文件内容最后被修改的时间

off_t           文件大小和偏移量

        time_t     st_ctime;      //文件状态改变时间

pid_t           进程ID和进程组ID

        blksize_t st_blksize;    //文件内容对应的块大小

ptrdiff_t           两个指针相减的结果

        blkcnt_t   st_blocks;     //伟建内容对应的块数量

rlim_t           资源限制

      };

sig_atomic_t           能原子的访问的数据类型

sigset_t           信号集

size_t           对象,大小,不带符号

ssize_t           返回字节计数的函数, 带符号的

time_t           日历时间的秒计数器

uid_t           数值用户ID

wchar_t           能表示所有不同的字符码

复制已打开文件描述符

#include<unistd.h>

int dup(int fd)

出错返回-1

int dup2(int fd,int fd2)

改变已打开文件性质

#include<sys/types.h>
#include<unistd.h>
#include<fcntl.h>

int fcnt1(int fd,int cmd)

出错返回-1

int fcnt1(int fd,int cmd,long arg)

同步命令

#include<unistd.h>

void sync(void)

块缓存排入写队列,系统进程(update)30s条用一次sync。定期刷新内核块缓存

成功返回0,出错返回-1

int fsync(int fd)

引用单个文件,可用与数据库应用软件,确保修改过的块立即写到磁盘上

目录文件操作

#include<sys/types/h>
#include<sys/stat.h>

int mkdir(const char*pathName,mode_t mode)

创建空目录(至少设置一个执行许可位)

成功返回0,出错返回-1

#include<unistd.h>

int rmdir(const char*pathName)

删除空目录(必须空才能删除)

成功返回0,出错返回-1

#include<sys/types.h>
#include<dirent.h>

DIR*opendir(const chat*pathName)

打开目录

#include<sys/types.h>
#include<dirent.h>

int closedir(DIR*dp)

关闭目录

#include<sys/types.h>
#include<dirent.h>

struct dirent*readdir(DIR*dp)

目录读取

#include<unistd.h>

int chdir(const char*NewpathName)

成功返回0,出错返回-1

int fchdir(int Newfd)

改变当前工作路径

#include<unistd.h>

char *getcwd(char *buf,size_t size)

获取当前工作路径,缓存长度size

链接文件操作

#include<unistd.h>

int link(const char*pathName1,const char*pathName2)

创建新目录项pathName2(必须不存在),引用现存文件pathName2

硬链接(同一文件系统,超级用户

#include<unistd.h>

int unlink(const char*pathName)

删除目录项

#include<unistd.h>

int symlink(const char*actualPath,const char*symPath)

创建一个指向actual的新目录项sym

符号链接(可不同文件系统,任意用户

#include<unistd.h>

readlink(const char*pathName,char*buf,int bufSzie)

查看pathname链接,信息存在buf中,并返回bufsize

管道文件操作

#include<stdio.h>

int pipe(int fdes[2])

用于不同进程数据信息传递(管道创立成功返回文件描述符

普通设备相当于Linux目录/dev中的文件,用基于文件描述符I/O操作进行读写

特殊设备特殊性(磁带只能顺序读写访问,不能使用lseek随机读写

设置缓存属性

#include<stdio.h>

void setbuf(FILE*fp,char*buf)

激活或禁止缓冲区开关,BUFSIZ(全缓存)或无缓存

_IOFBF 全缓存

void setbuffer(FILE*fp,char*buf,size_t size)

自行指定缓冲区大小

_IOLBF 行缓存

void setlinebuf(FILE*fp)

行缓存

_IONBF 无缓存

int setvbuf(FILE*fp,char*buf,int mode,size_t size)

灵活性

缓存清洗

#include<stdio.h>

int fflush(FILE*fp)

将缓冲区中尚未写入文件的数据强制保存到文件。成功0,失败EOF

#include<stdio_ext.h>

void fpurge(FILE*fp)

清除缓冲区数据

流打开

#include<stdio.h>

FILE*fopen(const char*pathName,const char*type)

从头开始读写

1. //只有含w的不存在的文件会新建,其他会报错

FILE*freopen(const char*pathName,const char*type,FILE*fp)

freopen("input1.txt","r",stdin);
freopen("output.txt","w",stdout);

2. //r只读;w只写;a尾增;文本ASCII

成功返回文件指针,失败NULL

FILE*fdopen(int fd,const char *type)

从尾开始读写

3. //rb读;wb写;ab尾增;二进制

int fclose(FILE*fp)  

成功0,失败EOF;网络环境检查必要性

4. //以下读写↓

字符输入

#include<stdio.h>

int getc ( FILE * fp );

读入字符
int ferror ( FILE *fp)出错为真
int feof( FILE * fp );文件结束为真
void cleareer(FILE*fp)清除两个标志
int ungetc(int c ,FILE*fp)字符送回流中

5. //r+;w+;a+;文本ASCII

int fgetc ( FILE * fp );

6. //rb+;wb+;ab+二进制

int getchar (void);=getc(stdin)

字符输出

#include<stdio.h>

int putc ( int c,FILE * fp );

int fputc (int c, FILE * fp); 

成功c,出错EOF

int putchar (int c);=putc(c,stdout)

行输入

#include<stdio.h>

char*fgets(char*buf,int n,FILE*fp)

缓冲区读到'\n'结束

成功返回首地址,失败NULL

char*gets(char*buf);

缓冲区由用户提供,缓冲区越界危险

行输出

#include<stdio.h>

int fputs(const char *buf,FILE*restrict fp)

成功返回字节数,失败-1

int puts(const char*str)

标准输出

直接I/O操作

#include<stdio.h>

size_t fread ( void * ptr, size_t size, size_t count, FILE * fp );

size_t fwrite ( const void * ptr, size_t size, size_t count, FILE*fp );

格式化输出

#include<stdio.h>

int printf ( const char * format, ... )

int fprintf ( FILE * fp, const char * format, ... )

右到左(可以int到char/string)

int sprintf ( char*str, const char * format, ... )

int snprintf ( const char *str,size_t size, format, ... )

格式化输入

#include<stdio.h>

int scanf ( const char * format, ...);

int fscanf ( FILE*fp,char * str, const char * format, ...);

左到右(可以char/string到int)

int sscanf ( char * str, const char * format, ...);