Linux编程手册读书笔记第四章(20140407)

  1. 标准文件描述符定义在<unistd.h>中,STDIN_FILENO,  STDOUT_FILENO,  STDERR_FILENO
  2. 打开一个文件:open()

      include<sys/stat.h>

      #include<fcntl.h>

      int open(const char *pathname, int flags, …/* mode_t mode*/);

      1)调用发生错误,open返回-1,并将errno设置为相应的错误标志。

      2flags为位掩码,用于指定文件的访问模式,O_CREATE O_RDONLY, O_WRONLY,  O_RDWRO_APPEND;   注:因是位掩码,O_RDWR不等同于O_RDONLYO_WRONLY

      3mode为位掩码,用于指定文件的访问权限。如果open  flags参数并没有指定O_CREATE标志,则可以省略mode参数。

  1. O_EXCL,此标志与O_CREATE标志结合使用表明如果文件已经存在,则不会打开文件,且open()调用失败,返回错误,errnoEEXIST。换言之,此标志确保了调用者(open()的调用进程)就是创建文件的进程。
  2. 读取文件内容:read()

      include<unistd.h>

      ssize_t read(int fd, void * buffer, size_t count);

      1)如果read()调用成功,将返回实际读取的字节数,如遇到文件结束(EOF)则返回0

      2)从终端读取字符,一遇到换行符(\n),read()调用就会结束。

  1. 数据写入文件:write()

      include<unistd.h>

      ssize_t write(int fd, void * buffer, size_t count);

      write()调用成功,将返回实际写入文件的字节数

  1. 关闭文件:close()

      include<unistd.h>

      int close(int fd);

     close()可能执行失败:企图关闭一个未打开的文件描述符;或者两次关闭同一个文件描述符。

  1. size_t: 无符号整数类型;          ssize_t:有符号的整数类型; 
  2. 改变文件偏移量:lseek()

      #include<unistd.h>

      off_t lseek(int fd, off_t offset, int whence);

     1)文件第一个字节的偏移量为0

     2offset:指定一个以字节为单位的数值, off_t:有符号整形数

     3whence:表明应参照哪个基点来解释offset参数。

            SEEK_SET: 将文件偏移量设置为从文件头部起始点开始的offset个字节

            SEEK_CUR: 相对于当前文件偏移量,将文件偏移量调整offset个字节

            SEEK_END: 将文件偏移量设置为起始于文件尾部的offset个字节,也就是说,offset参数应该从文件最后一个字节之后的下一个字节算起

     4lseek()调用成功会返回新的文件偏移量。

     5lseek()并不适用于所有类型的文件。不允许将lseek()应用于管道、FIFOsocket或者终端,一旦如此,errno返回ESPIPE

  1. 通用I/O模型以外的操作:ioctl()

      #include<sys/ioctl.h>

      int ioctl(int fd, int request, …/*argp*/);

      (1) request: 指定了将在fd上执行的控制操作。具体设备的头文件定义了可传递给request参数的常量。

    2ioctl根据request的参数值来确定argp所期望的类型。通常情况下,argp是指向整数或结构的指针。有些情况,不需要使用argp

    3ioctl5350上用于对于芯片的管脚进行I/O设置。常规使用场景是open-->ioctl-->close


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/383369.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

快速排序概念及实现

快速排序 快速排序是Hoare于1962年提出的一种二叉树结构的交换排序方法&#xff0c; 其基本思想为&#xff1a; 任取待排序元素序列中的某元素作为基准值&#xff0c;按照该排序码将待排序集合分割成两子序列&#xff0c;左子序列中所有元素均小于基准值&#xff0c;右子序列…

Linux编程手册读书笔记第五章(20140408)

改变已打开文件性质&#xff1a;fcntl&#xff08;&#xff09; #include<fcntl.h> int fcntl(int fd, int cmd, …); (1) 调用失败返回&#xff0d;1 &#xff08;2&#xff09;fcntl函数有5种功能&#xff1a; a. 复制一个现有的描述符&#xff08;cmd&#xff1d;F_D…

归并排序概念及其实现

基本思想&#xff1a; 归并排序&#xff08;MERGE-SORT&#xff09;是建立在归并操作上的一种有效的排序算法,该算法是采用分治法&#xff08;Divide and Conquer&#xff09;的一个非常典型的应用。将已有序的子序列合并&#xff0c;得到完全有序的序列&#xff1b;即先使每个…

##连接符和#符的使用

C语言中如何使用宏C&#xff08;和C&#xff09;中的宏&#xff08;Macro&#xff09;属于编译器预处理的范畴&#xff0c;属于编译期概念&#xff08;而非运行期概念&#xff09;。下面对常遇到的宏的使用问题做了简单总结。 关于#和## 在C语言的宏中&#xff0c;#的功能是将其…

计数排序和基数排序

适用于数据集中在某个范围中&#xff0c; //统计每个数据出现的次数 计数排序&#xff1a;鸽巢原理 1找范围 2给空间 3记次数 4回收 for(int i 0;i<size; i) {temp[array[i]]; }for(int i0;i<range;i&#xff09;{while(temp[i])array[index]i;}代码实现 时间复杂度&…

信号量sem_wait()的使用

闲来无事&#xff0c;我给大家讲下UNIX/Linux下信号量函数的使用。首先你得知道什么叫信号量&#xff0c;什么时候要用信号量。这个嘛&#xff0c;主要就是用来保护共享资源的&#xff0c;也就是说如果你想限制某个&#xff08;些&#xff09;资源在同一时刻只能有一&#xff0…

C++起始(关键字,命名空间,缺省参数,函数重载(c语言为什么不支持函数重载))

1. C关键字(C98) 2. 命名空间 在C/C中&#xff0c;变量、函数和后面要学到的类都是大量存在的&#xff0c;这些变量、函数和类的名称将都存在于全局作用 域中&#xff0c;可能会导致很多冲突。使用命名空间的目的是对标识符的名称进行本地化&#xff0c;以避免命名冲突或名字污…

va_list和vsnprintf、getopt

原理解释&#xff1a; VA_LIST 是在C语言中解决变参问题的一组宏&#xff0c;在<stdarg.h>头文件下。 VA_LIST的用法&#xff1a; &#xff08;1&#xff09;首先在函数里定义一具VA_LIST型的变量&#xff0c;这个变量是指向参数的指针 &#xff08;2&a…

GitHub相关

git是一个版本控制工具. 主要解决三个问题 代码被喵星人吃掉了.产品经理反复修改需求, 需要同时维护多个版本代码.多人协同开发. 安装 git for windows 这个是一个git的windows系统的命令行版本 https://git-scm.com/downloads 下载会很慢很慢 使用 Github 创建项目 注册…

linux中bin与sbin目录的作用及区别介绍

在linux系统中&#xff0c;有两个重要的目录&#xff1a;bin与sbin&#xff0c;分别包括/bin、/usr/bin/与/sbin、/usr/sbin/。 bin: bin为binary的简写&#xff0c;主要放置系统的必备执行文件&#xff0c;例如: cat、cp、chmod df、dmesg、gzip、kill、ls、mkdir、more、m…

c++起始(名词修饰,extern “C” ,引用)

名字修饰(name Mangling) 在C/C中&#xff0c;一个程序要运行起来&#xff0c;需要经历以下几个阶段&#xff1a;预处理、编译、汇编、链接。 Name Mangling是一种在编译过程中&#xff0c;将函数、变量的名称重新改编的机制&#xff0c;简单来说就是编译器为了区分各 个函数…

Linux进程间通信方式--本地socket

先上一个代码 服务端&#xff1a; [cpp] view plaincopy //s_unix.c #include <stdio.h> #include <sys/types.h> #include <sys/socket.h> #include <sys/un.h> #define UNIX_DOMAIN "/tmp/UNIX.domain" int main(void) { so…

extern和static的区别

c语言中的 static&#xff1a; 修饰局部变量&#xff1a;存放在静态数据区&#xff0c;生命周期位整个程序结束&#xff0c;但作用于仍为函数局部。 修饰全局变量&#xff1a;无法被同一工程其他源文件访问。 修饰函数&#xff1a;与全局变量类似。 extern&#xff1a; 可被…

RT5350原厂SDK及AP移植步骤详解

最近想搞一下rt5350&#xff0c;所以找了个原厂的SDK包进行了编译&#xff0c;很快路由器就可以用了&#xff0c;把我的编译操作步骤写了下分享给更多的爱好者&#xff0c;供大家参靠&#xff0c;下一步准备移植摄像头玩玩。有兴趣的可以一起交流。 RT5350移植Toolchain工具的安…

linux系统编程之进程概念(操作系统---管理,进程创建,进程状态,进程优先级, 环境变量,程序地址空间,进程O(1)调度方法)

系统编程&#xff1a; 进程概念->进程控制->基础IO->进程间通信->进程信号->多线程进程概念 冯诺依曼体系结构----现代计算机硬件体系结构 冯诺依曼体系结构----现代计算机硬件体系结构 计算机五大硬件单元&#xff1a;输入设备&#xff1a;键盘输出设备&#…

Make Menuconfig详解 (配置内核选择)

Make Menuconfig简介 make menuconfig 图形化的内核配置make mrproper -----删除不必要的文件和目录. #make config&#xff08;基于文本的最为传统的配置界面&#xff0c;不推荐使用&#xff09; #make menuconfig&#xff08;基于文本选单的配置界面&#xff0c;字符终端下…

Linux系统编程之进程控制(进程创建,fork函数,进程中止,进程等待,程序替换)

进程创建 fork()------复制&#xff0c;返回值&#xff0c;写时复制 vfork()创建子进程—子进程与父进程共用同一块虚拟地址空间&#xff0c; 为了防止调用栈混乱&#xff0c;因此阻塞父进程直到子进程调用exit&#xff08;&#xff09;退出或者进行程序替换 vfork创建的子…

Linux内核配置系统浅析

随着 Linux 操作系统的广泛应用&#xff0c;特别是 Linux 在嵌入式领域的发展&#xff0c;越来越多的人开始投身到 Linux 内核级的开发中。面对日益庞大的 Linux 内核源代码&#xff0c;开发者在完成自己的内核代码后&#xff0c;都将面临着同样的问题&#xff0c;即如何将源代…

Linux系统编程下做一个简易的shell

自主实现一个shell--------minshell shell&#xff1a;命令行解释器-------解释执行用户的输入&#xff08;完成相对应的功能&#xff09; 步骤 1. 获取标准输入中的字符串 2. 对字符串进行解析[ls -l -a][ls ] [-l ] [-a] 3. 创建子进程 4. 子进程中进行程序替换 5. 父进程…

C++起始(内联函数,宏的优缺点,const关键字,auto关键字(C++11)基于范围的for循环(C++11). 指针空值nullptr(C++11))

内联函数 概念 以inline修饰的函数叫做内联函数&#xff0c;编译时C编译器会在调用内联函数的地方展开&#xff0c;没有函数压栈的开销&#xff0c; 内联函数提升程序运行的效率 函数前增加inline关键字将其改成内联函数&#xff0c;在编译期间编译器会用函数体替换函数的调用…