8种机械键盘轴体对比
本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选?
字符设备 和 块设备都很好体现”一切皆文件”的Linux设计思想。
设备驱动最终通过操作系统的文件系统调用或C库函数被访问以下为Linux文件操作函数:
Linux 系统编程:1. 创建:1int (const char *filename, mode_t mode);
参数mode指定新建文件的存储权限, 它同umask一起决定文件的最终权限 (mode & umask );1int umask(int newmask);2. 打开:1
2int open(const char* pathname, int flags);
int open(const char* pathname, int flags, mode_t mode);
flags 取值:标示含义O_RDONLY以只读方式打开文件
O_WRONLY以只写方式打开文件
O_RDWR以读写方式打开文件
O_APPEND以追加方式打开文件
O_CREAT创建一个新文件
O_EXEC如果使用了O_CREAT 且文件已经存在,就会发生错误
O_NOBLOCK以非堵塞方式打开一个文件
O_TRUNC如果文件已经存在,则删除文件内容
mode取值:标志含义S_IRUSR用户可读
S_IWUSR用户可写
S_IXUSR用户可执行
S_IRWXU用户可读,写,执行
S_IRGRP组可读
S_IWGRP组可写
S_IXGRP组可执行
S_IRWXG组可读,写,执行
S_IROTH其他人可读
S_IWOTH其他人可写
S_IXOTH其他人可执行
S_IRWXO其他人可读,写,执行
S_ISUID设置uid
S_ISGID设置GID
1 执行权限
2 写权限
4 读权限 – 相互配合组合UID 设置文件执行阶段具有文件所有者权限
GID 只对目录有效,设置该位后,任何用户在此目录下创建文件都具有和该目录所属组想同
chmod u+s filename; // set uid
chmod g+s dirname; // set gid3. 读写:1
2int read(int fd, const void* buf, size_t length);
int write(int fd, const void* buf, size_t length);4. 定位:1int lseek(int fd, offset_t offset, int whence);
lseek() 将文件读写指针相对whence移动offset字节, 操作成功,返回指针相对于文件头的位置。
where取值:SEEK_SET : 相对于文件开头
SEEK_CUR : 相对文件读写指针的当前位置
SEEK_END : 相对文件末尾
文件长度 = lseek(fd, 0, SEEK_END);关闭:1int close(int fd);
C 库操作1. 创建和打开1FILE *fopen(const char *filename, const char *mode);
mode 取值:标志含义r, rb以只读方式打开
w, wb以只写方式打开, 文件不存在,则创建文件,否则文件被截断
a, ab以追加方式打开,如果文件不存在,则创建文件
r+, r+b , rb+以读写方式打开
w+, w+b, wh+以读写方式打开,如果文件不存在和创建文件,否则文件被截断
a+, a+b, ab+以读和追加方式打开,如果文件不存在,则创建新文件
b 用于 区分二进制文件和文本文件, DOS,window系统有区分, Linux 系统并不区分二进制文件和文本文件2. 读写: 字符,字符串为单位1
2
3
4
5
6
7
8int fgetc(FILE *stream);
int fputc(int c, FILE *stream);
char *fgets(char *s, int n, FILE *stream);
int fputs(const char *s, FILE *stream);
int fprintf(FILE *stream, const char *format, ...);
int fscanf(FILE *stream, const char *format, ...);
size_t fread(void *ptr, size_t size, size_t n, FILE *stream);
size_t fwrite(const void *prt, size_t size, size_t n, FILE *stream);3. C库提供读写过程中定位能力:1
2
3int fgetpos(FILE* stream, fpos_t *pos);
int fsetpos(FILE* stream, const fpos_t *pos);
int fseek(FILE* stream, long offset, int whence);4. 关闭:1int fclose(FILE* stream);5. 定位:1int fseek(FILE* stream, long offset, int whence);
补充:1. 类型转换: FILE* 与 int fd 转换:1
2int fileno(FILE* stream);
FILE* fdopen(int fd, char *mode); // int --> FILE*2. rewind:1void rewind(FILE* stream)
从新将文件指针指向文件开头, 同时清除和文件流相关的错误和EOF标记, 等价于:1fseek(stream, 0, SEEK_SET);3. ftell:1long ftell(FILE* steram);
得到文件读写指针当前位置偏离文件头的偏移字节 等价于:1fseek(stream, 0, SEEK_CUR);