文件类型 | 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, ...); |