linux运行编程文件格式,Linux 文件系统编程

66b52468c121889b900d4956032f1009.png

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

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值