佛山网站设计案例,什么是网站?,能打开各种网站的浏览器下载合集,网站方案建设书怎么写欢迎来到Cefler的博客#x1f601; #x1f54c;博客主页#xff1a;那个传说中的man的主页 #x1f3e0;个人专栏#xff1a;题目解析 #x1f30e;推荐文章#xff1a;题目大解析#xff08;3#xff09; 目录 #x1f449;#x1f3fb;文件是什么#xff1f; 博客主页那个传说中的man的主页 个人专栏题目解析 推荐文章题目大解析3 目录 文件是什么C常见文件接口复习open函数文件返回值fd进程和打开文件的对应关系如何进行维护如何看待一切皆文件 write函数 文件是什么
文件 内容属性 所有对文件的操作a.对内容操作 b.对属性操作。 内容是数据属性其实也是数据。我们访问一个文件我们是一个进程一个文件打开前是普通的磁盘文件打开后将文件加载到内存 一个进程可以打开多个文件
我们研究文件操作的本质就是进程和被打开文件的关系
进程通过操作系统打开文件而操作系统提供接口(如fopen)给进程打开磁盘中的文件。
操作系统访问硬件磁盘中的文件要加载到内存中而操作系统要管理文件必须先描述再组织所以一个文件的要被打开一定先在内核中形成被打开的文件对象即描述PCB。
C常见文件接口复习
1.fopen以写的形式打开源文件内容会被清空
2.向文件写入字符串strlen(str),不需要加1,即不用写入\0
open函数
C语言中的open()函数是打开文件的函数它可以用于创建或打开文件并返回一个文件描述符file descriptor。
open()函数的声明如下
#include fcntl.hint open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);其中第一个参数pathname是指要打开或创建的文件的路径名这个参数是必须的。第二个参数flags是一个控制文件打开方式的标志这个参数也是必须的。第三个参数mode表示新建文件时的权限只有在创建新文件时才需要传入。
flags参数常用的取值如下
O_RDONLY只读模式打开文件O_WRONLY只写模式打开文件O_RDWR读写模式打开文件O_CREAT如果文件不存在则创建文件O_TRUNC如果文件已经存在则把文件截断为0长度O_APPEND以追加模式打开文件
mode参数常用的取值如下
S_IRUSR用户读权限S_IWUSR用户写权限S_IXUSR用户执行权限S_IRGRP组读权限S_IWGRP组写权限S_IXGRP组执行权限S_IROTH其他用户读权限S_IWOTH其他用户写权限S_IXOTH其他用户执行权限
open()函数返回一个文件描述符这个描述符是一个整数值它是操作系统为了方便管理文件而提供的一种接口。在后续的文件读写等操作中我们可以使用这个文件描述符来指代该文件。
如果open()函数执行成功则返回一个非负整数文件描述符否则返回-1。通常当返回-1时errno变量会被设置为下面的某个值来表示错误原因
EACCES无法访问指定文件ENOENT指定文件不存在EEXIST文件已经存在但打开标志中指定了O_CREAT标志EINVAL打开标志无效
例如要以只读模式打开一个文件可以这样调用open()函数
int fd;
fd open(/path/to/file, O_RDONLY);
if (fd -1) {perror(Error opening file);exit(EXIT_FAILURE);
}在使用完文件后应该使用close()函数关闭文件描述符
int ret;
ret close(fd);
if (ret -1) {perror(Error closing file);exit(EXIT_FAILURE);
}这是open()函数的基本用法还有一些高级用法比如使用open()函数打开套接字或管道等不过这些用法超出了本回答的范围。
文件返回值fd
文件的返回值fd是一个连续的小整数fd的本质就是进程文件描述符表数组的下标
而OS会默认先打开三个标准文件标准输入stdin标准输出stdout标准错误stderr下标分别为012。OS默认打开这三个标准就是为了让程序员默认进行输入输出代码编写。
进程和打开文件的对应关系如何进行维护 如何看待一切皆文件 stdin,stdout,stderr这些标准文件都有来实现读写功能的函数而文件PCB中存储着这些函数的函数指针。
write函数
write()函数是C语言中用于向文件描述符或者套接字中写入数据的函数。
write()函数的声明如下
#include unistd.hssize_t write(int fd, const void *buf, size_t count);其中fd是要写入的文件描述符buf是指向要写入数据的缓冲区的指针count是要写入的字节数。
write()函数的返回值是成功写入的字节数如果出现错误则返回-1并设置全局变量errno以指示错误类型。
下面是一个简单的示例演示如何使用write()函数向文件中写入数据
#include stdio.h
#include stdlib.h
#include unistd.h
#include string.hint main() {int fd;ssize_t bytes_written;const char *str Hello, world!\n;fd open(output.txt, O_WRONLY | O_CREAT, S_IRUSR | S_IWUSR);if (fd -1) {perror(open);exit(EXIT_FAILURE);}bytes_written write(fd, str, strlen(str));if (bytes_written -1) {perror(write);exit(EXIT_FAILURE);}close(fd);return 0;
}在这个示例中首先使用open()函数打开一个文件然后使用write()函数向这个文件中写入数据最后使用close()函数关闭文件描述符。
需要注意的是write()函数是以字节为单位进行写入的如果要写入一个字符串需要使用strlen()函数来获取字符串的长度。此外write()函数并不会自动在字符串的末尾添加空字符(‘\0’)所以在写入字符串时需要确保字符串以null结尾或者传入字符串长度时包含结尾的null字符。 如上便是本期的所有内容了如果喜欢并觉得有帮助的话希望可以博个点赞收藏关注❤️ ,学海无涯苦作舟,愿与君一起共勉成长