原创 系统调用方式文件编程《二》

2015-3-4 18:21 614 14 14 分类: MCU/ 嵌入式 文集: Linux应用程序开发学习

2.6 定位文件

2.6.1 函数名           lseek   
2.6.2 函数原形         off_t lseek(int fd, off_t offset, int whence);
2.6.3 函数功能         重新定位文件的读写位置
2.6.4 所属头文件       <sys/types.h> <unistd.h>
2.6.5 返回值           成功:返回移动后的文件距离头文件的位置  失败:-1
2.6.6 参数说明         fd:要定位的文件的文件描述符
                       offset:偏移量
                       whence:SEEK_SET:将该文件的偏移量设置为距文件开始处的offset个字节
                            SEEK_CUR:将该文件的偏移量设置为距当前值加offset,offset可正可负。
                               SEEK_END:将该文件的偏移量设置为文件长度加offset个字节,offset可正可负。
 

2.7 复制文件描述符

2.7.1 函数名           dup
2.7.2 函数原形         int dup(int oldfd);   int dup2(int oldfd, int newfd);  
2.7.3 函数功能         复制一个文件描述符
2.7.4 所属头文件       <unistd.h>
2.7.5 返回值           成功:返回新的文件描述符  失败:-1
2.7.6 参数说明         oldfd:待复制的老的文件描述符
                      newfd:dup2则可以用newfd参数指定新描述的数值。如果newfd已经打开,则先将其关闭。如若oldfd等于newfd,则dup2返回newfd,而不关闭它。
 
小实验:创建一个aim.c文件,且将hello.c中的前10个字节复制到aim.c中
附录:
#include<stdio.h>
#include<sys/types.h> 
#include<sys/stat.h>  
#include <fcntl.h>
#include<unistd.h>
int main()
{
     int fd1 = 0;
     int fd2 = 0;
     int read_flag = 0;
     int write_flag = 0;
     char read_buf[10];

     fd1 = open("/home/copy_commander/hello.c",O_RDWR); 
     fd2 = open("/home/copy_commander/aim.c",O_RDWR|O_CREAT,S_IRWXU); 
     if(fd1 >= 0)
     {
          read_flag = read(fd1, read_buf, 10);
          if(read_flag >= 0)
          {
               write_flag = write(fd2, read_buf, 10);
               if(write_flag >= 0)
               {
                    printf("please check the file!\n");
               }
               else
                    printf("write error!\n");
          }
          else
          {
               printf("read error!\n");
          }
     }
     else
     {
          printf("open error!\n");
     }
     close(fd1);
     close(fd2);
     return 0;
}

文章评论0条评论)

登录后参与讨论
相关推荐阅读
潇洒哥 2015-07-08 16:01
位操作符的使用技巧
在C语言编程中,数据的位是可以操作的最小数据单位,理论上可以用“位运算”来完成所有的运算和操作。一般的位操作是用来控制硬件的,或者做数据变换使用,但是,灵活的位操作可以有效地提高程序运行的效...
潇洒哥 2015-04-04 17:39
finish shell分析之底层usart
rt_thread的finsh shell系统不愧是调试的一项利器,它可以除了完成一般shell的功能外,甚至还可以自定义命令。这个对功能单一的嵌入式系统来说是十分可贵的。在此我并不想对finsh...
潇洒哥 2015-04-01 21:29
__main() 和 main()
因为我们通常在BOOTLOADER中都已做好了比较细致的初始化工作,包括代码的搬运,所以我们最好别再调用库函数__main(),因为__main()作为ADS集成好的库函数,会对系统进行初始化设置...
潇洒哥 2015-03-26 22:54
RT-Thread学习之scons篇--解析rtconfig.py文件
rtconfig.py文件,主要用于指定编译器以及安装路径。除此之外,该文件中定义了大量的变量,这些变量包括编译选项,汇编选项,链接选项。   import os # toolchain...
潇洒哥 2015-03-26 22:53
RT-Thread学习之scons篇--SConsruct脚本文件解析
       scons的构建文件名称是统一的都称为SConstruct。其是scons所接受的编译脚本主文件。当然为了方便目录的组织,也允许在各个目录下面存放SConscript, 然后最上面S...
潇洒哥 2015-03-26 22:53
RT-Thread学习之scons篇--SConcript文件解析
SConscript文件是用来指定哪些文件会加入编译。先来分析下BSP主目录下的SConscript文件: import rtconfig Import('RTT_ROOT') fro...
我要评论
0
14
1
2
3
4
5
6
7
8
9
0
关闭 站长推荐上一条 /3 下一条