当前位置: 首页 > news >正文

企业网站特点和优势打开百度一下网页版

企业网站特点和优势,打开百度一下网页版,如何做淘宝店网站,wordpress tag 去掉文章笔记来自于【速学Linux】手把手教你学嵌入式Linux C应用编程_哔哩哔哩_bilibili 一#xff0c;什么是linux应用程序 1.运行在linux操作系统用户空间的程序 2.内核程序运行在内核空间#xff0c;应用程序运行在用户空间 在终端执行的命令ls,ps。。。。。。都是运行在用…文章笔记来自于【速学Linux】手把手教你学嵌入式Linux C应用编程_哔哩哔哩_bilibili 一什么是linux应用程序 1.运行在linux操作系统用户空间的程序 2.内核程序运行在内核空间应用程序运行在用户空间 在终端执行的命令ls,ps。。。。。。都是运行在用户空间 3.内核空间和用户空间 二应用编程与裸机编程、驱动编程有什么区别 三如何编写linux应用程序 1.系统调用  【linux操作系统向应用层提供的接口system call ,是linux 应用层进入内核空间的入口】 2.库函数标准c库函数  【对系统调用的封装】 3.不要局限于编程语言  四文件I/O基础 1.什么是文件I/O ?   【对文件的输入和输出操作也就是对文件的读/写操作】 2.文件描述符 这相当于是每次打开一个文件每个文件会分配一个文件描述符【分配一个没有被使用的最小非负整数作为文件描述符】相当于这个文件的标签一下所有执行 IO 操作的系统调用都是通过文件描述符来索引到对应的文件一个进程最多可以打开 1024 个文件当文件被关闭时对应的文件描述符会被释放释放之后也就成为了一个没有被使用的文件描述符了 3.打开/创建文件open()函数 int open(const char *pathname, int flags); int open(const char *pathname, int flags, mode_t mode); pathname 字符串类型用于标识需要打开或创建的文件可以包含路径绝对路径或相对路径信息譬如./src_file 当前目录下的 src_file 文件、 /home/dengtao/hello.c 等如果 pathname 是一个符号链接会对其进行解引用 flags 调用 open 函数时需要提供的标志包括文件访问模式标志以及其它文件相关标志这些标志使 用宏定义进行描述 mode 此参数用于指定新建文件的访问权限 Linux 中 已经定义好的宏不同的宏定义表示不同的权限 4.写文件write()函数 ssize_t write(int fd, const void *buf, size_t count); fd 文件描述符。关于文件描述符前面已经给大家进行了简单地讲解这里不再重述我们需要将进 行写操作的文件所对应的文件描述符传递给 write 函数。 buf 指定写入数据对应的缓冲区。 count 指定写入的字节数。 返回值 如果成功将返回写入的字节数 0 表示未写入任何字节如果此数字小于 count 参数这不 是错误譬如磁盘空间已满可能会发生这种情况如果写入出错则返回 -1 。 读文件和写文件存在一个读写位置【读写指针】假设初始打开的文件才开始是在0的位置当写入100字节指针往后移动100字节且 读写指针是共用指针然后就会从100字节出开始读取 5.读文件 read()函数 ssize_t read(int fd, void *buf, size_t count); fd 文件描述符。与 write 函数的 fd 参数意义相同。 buf 指定用于存储读取数据的缓冲区。 count 指定需要读取的字节数。 返回值 如果读取成功将返回读取到的字节数实际读取到的字节数可能会小于 count 参数指定的字节 数也有可能会为 0 譬如进行读操作时当前文件位置偏移量已经到了文件末尾。实际读取到的字节数少 于要求读取的字节数譬如在到达文件末尾之前有 30 个字节数据而要求读取 100 个字节则 read 读取成 功只能返回 30而下一次再调用 read 读它将返回 0 文件末尾。 6. 关闭文件 close()函数 int close(int fd); fd 文件描述符需要关闭的文件所对应的文件描述符。 返回值 如果成功返回 0 如果失败则返回 -1 。 学习示例 1.打开文件写入内容 #include sys/types.h #include sys/stat.h #include fcntl.h #include unistd.h #include stdio.h int main(void) {int fd;int ret;fd open(./test.txt,O_WRONLY | O_CREAT | O_EXCL,0644);if(-1 fd){printf(open error);return 1;}printf(open ok\r\n);ret write(fd, Hello world,11);if(-1 ret){printf(write error\r\n);close(fd);return 1;}printf(write %d Bytes OK,ret);close(fd);return 0; } 运行结果 2.读取文件内容 #include sys/types.h #include sys/stat.h #include fcntl.h #include unistd.h #include stdio.hint main() {int fd;char buf[125] {0};int ret;fd open(./test.txt,O_RDONLY); if(-1 fd){printf(open error);}printf(open ok);ret read(fd, buf, 11);if(-1 ret){printf(read error\r\n);close(fd);return 1;}printf(read %d bytes: %s,ret,buf);close(fd);return 0; } 运行结果 7.调整读写位置偏移lseek()函数 off_t lseek(int fd, off_t offset, int whence); fd 文件描述符。 offset 偏移量以字节为单位。 whence 用于定义参数 offset 偏移量对应的参考值该参数为下列其中一种宏定义 ⚫ SEEK_SET 读写偏移量将指向 offset 字节位置处从文件头部开始算 ⚫ SEEK_CUR 读写偏移量将指向当前位置偏移量 offset 字节位置处 offset 可以为正、也可以为 负如果是正数表示往后偏移如果是负数则表示往前偏移 ⚫ SEEK_END 读写偏移量将指向文件末尾 offset 字节位置处同样 offset 可以为正、也可以为负 如果是正数表示往后偏移、如果是负数则表示往前偏移。 五,深入探究文件I/O 1.linux系统如何进行文件管理 文件储存在硬盘上硬盘的最小存储单位叫做“扇区”Sector每个扇区储存 512 字节相当于 0.5KB,操作系统读取硬盘的时候,以“块”为单位进行文件读取。【“块”的大小最常 见的是 4KB即连续八个 sector 组成一个 block】 静态文件文件存放在磁盘内叫做静态文件 inode: 指向文件存放在磁盘的位置 pcb: 进程控制块管理该进程譬如用于记录进程的状态信息、运行特征 2.错误处理 1.errno 2.strerror函数 #include sys/types.h #include sys/stat.h #include fcntl.h #include unistd.h #include stdio.h #include errno.h #include string.h int main(void) {int fd1;fd1 open(./test111.c,O_RDONLY);if(-1 fd1){printf(%s\n, strerror(errno));return -1;}return 0; }运行结果 3.perror可以加入自己的打印信息 #include sys/types.h #include sys/stat.h #include fcntl.h #include unistd.h #include stdio.h #include errno.h #include string.h int main(void) {int fd1;fd1 open(./test111.c,O_RDONLY);if(-1 fd1){perror(open error);return -1;}return 0; }运行结果 3.空洞文件 概念当一个文件本身只有4k的大小但是当前的通过lseek从文件头部偏移6000个字节开始写入内容导致4096-6000字节间没有内容出现了“空洞”也就是空洞文件 使用场景一个文件可以从不同的地址开始写入不再是单线程从头开始写入多个线程同时写入利用了多线程的优势 #include sys/types.h #include sys/stat.h #include fcntl.h #include unistd.h #include stdio.h #include errno.h #include string.h static unsigned char buf[4096]; int main(void) {int fd;int ret;fd open(./test.txt,O_WRONLY | O_CREAT | O_EXCL,0644);if(-1 fd){perror(open error);return 1; }ret lseek(fd, 4096, SEEK_SET);if(-1 ret){perror(lseek error);close(fd);return 1;}ret write(fd, buf, 4096);if(-1 ret){printf(write error);close(fd);return 1;}close(fd);return 0;}运行结果 ls 命令:查看到的大小是文件的逻辑大小    du 命令:查看到的大小是文件实际占用存储块的大小 4.O_TRUINC和O_APPEND O_TRUINC将文件原本的内容全部丢弃文件大小变为 0 #include sys/types.h #include sys/stat.h #include fcntl.h #include unistd.h #include stdio.h #include errno.h #include string.h int main(void) {int fd;fd open(./test.txt,O_WRONLY | O_TRUNC);if(-1 fd){perror(open error);close(fd);return 1; } close(fd);return 0; } 运行结果 O_APPEND当每次使用 write()函数对文件进行写操作时都会自动把文件当前位置偏移量移动到文件末尾 #include sys/types.h #include sys/stat.h #include fcntl.h #include unistd.h #include stdio.h #include errno.h #include string.h int main(void) {int fd;int ret;fd open(./test.txt,O_WRONLY | O_APPEND);if(-1 fd){perror(open error);close(fd);return 1; } ret write(fd,hello world,11);if(-1 ret){perror(write error);close(fd);return 1;}close(fd);return 0; } 运行结果 open可以多次打开一个文件产生多个文件描述符也就是存在多个文件表但是都指向同一个文件但是只能产生一个动态文件以及同一个inode。对于打开的每一个fd.都要依次关闭。 5.文件描述符的复制 int dup(int oldfd);                           复制文件描述符 int dup2(int oldfd, int newfd);        文件描述符的数可以自行决定 新的文件描述符和旧的指向同一个文件表去完成任何操作 #include sys/types.h #include sys/stat.h #include fcntl.h #include unistd.h #include stdio.h #include stdlib.h int main(void) {int fd1, fd2;int ret;fd1 open(./test_file, O_RDWR | O_CREAT | O_EXCL,S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH);if (-1 fd1) {perror(open error);exit(-1);}/* 复制文件描述符 */fd2 dup2(fd1, 100);if (-1 fd2) {perror(dup error);ret -1;goto err1;}printf(fd1: %d\nfd2: %d\n, fd1, fd2);ret 0;close(fd2); err1:/* 关闭文件 */close(fd1);exit(ret); } 运行结果 6.文件共享 概念同一个文件譬如磁盘上的同一个文件对应同一个 inode被多个独立的读写体同时进行 IO 操作 常见的三种文件共享的实现方式 1同一个进程中多次调用open函数打开同一个文件多个文件描述符指向不同的文件表但是多个文件表中的inode指针指向inode节点 2不同的进程分别打开同一个文件 3同一个进程中通过dupdup2函数对文件描述符进行复制  7.原子操作与竞争冒险 竞争冒险进程获得cpu的使用权完全是由操作系统决定的先后顺序是不可预期的 原子操作多个步骤组成的一个操作要么不执行要么必须执行完所有操作不可以只执行所有步骤的一个子集 (1)O_APPEND 实现原子操作 移动到文件末尾然后读写文件 (2)pread() 和 pwrite() 移动到偏移位置然后读写文件 (3) 创建一个文件O_EXCL 先判断是否有文件 然后创建文件 8.截断文件 ftruncate():使用文件描述符 fd 来指定目标文件大小,目标文件必须具有可写权限 truncate(): 使用 文件路径path 来指定目标文件大小 #include sys/types.h #include sys/stat.h #include fcntl.h #include unistd.h #include stdio.h #include stdlib.h int main(void) { int fd;int ret;fd open(./test.txt, O_RDONLY | O_WRONLY);if(-1 fd){perror(open error);return 1; }ret ftruncate(fd, 4096);if(ret -1){perror(sss);return 1;}close(fd);return 0; } 运行结果 9.fcntl和ioctl函数 fcntl()函数():对文件描述符做一系列的控制操作 int fcntl(int fd, int cmd, ... /* arg */ ) cmd 命令集 ⚫ 复制文件描述符 cmdF_DUPFD 或 cmdF_DUPFD_CLOEXEC ⚫ 获取 / 设置文件描述符标志 cmdF_GETFD 或 cmdF_SETFD ⚫ 获取 / 设置文件状态标志 cmdF_GETFL 或 cmdF_SETFL ⚫ 获取 / 设置异步 IO 所有权 cmdF_GETOWN 或 cmdF_SETOWN ⚫ 获取 / 设置记录锁 cmdF_GETLK 或 cmdF_SETLK ioctl()函数是一个文件 IO 操作的杂物箱可以处理的事情非常杂、不统一 int ioctl(int fd, unsigned long request, ...);
http://wiki.neutronadmin.com/news/32070/

相关文章:

  • 给女朋友做网站 知乎软件开发专业有哪些
  • 建设教育网站费用计算机类十大含金量证书
  • 苏州市建设厅网站编写app的软件
  • 镇江网站制作费用哪里做网站最便宜
  • 最新款淘宝客源码整网站程序模板+后台带自动采集商品功能带文章个体营业执照网上申请
  • 南通技术网站网站开发技术 html
  • 库尔勒网站建设价格刚开今天新开传奇网站
  • 东莞seo建站哪家好namesilo wordpress
  • 六种常见的网站类型云南旅行社网站开发
  • 广昌网站建设制作低价网站建设资讯
  • asp网站防攻击个人网站开发报告
  • 网站制作公司服务微信小程序在线玩
  • 网站seo关键词优化不锈钢网
  • 网站开发模板下载搭建影视网站
  • 基本建筑网站中山市网站建设
  • 企业手机网站建设渠道高新区免费网站建设
  • 学做网站论坛 可以吗oppo应用商店官网
  • 直播网站源码免费下载网站开发设计协议
  • vs2010网站开发实例有创意广告店名字大全
  • 网站开发w亿玛酷1流量订制ps做网站界面
  • 重庆公积金门户网站国内最炫酷的网站
  • 网站做优化多少钱兴文县建设工程网站
  • 梅州市网站制作点餐小程序模板
  • 做网站是需要多少钱wordpress无编辑栏
  • 全影网的网站哪儿做d应用商城app下载
  • 正中路桥建设发展有限公司网站临沂企业宣传片制作公司
  • 手机网站免费优化珠海网站制作费用
  • 秦淮做网站价格企业网络工程建设方案
  • 为什么建设文化馆网站门户网站功能模块
  • 柳州住房和城乡建设局网站群晖wordpress域名