国嵌视频教程例程分析之Linux文件时间编程

本文介绍了在Linux环境下使用系统调用和C库函数进行文件编程的方法。涵盖了文件创建、打开、关闭、读写及权限判断等操作,并通过示例代码详细解释了每种函数的使用方法。

Linux中文件编程可以使用两种方式,一是Linux系统调用,二是C语言库函数,前者依赖于Linux操作系统,后者与操作系统是独立的,在任何操作系统下,使用C语言库函数操作文件的方式都是相同的。

在国嵌的文件时间编程视频教程中,分别介绍了一些常用的基于Linux系统调用方式和C库函数方式操作文件的函数,还有就是对Linux时间数据进行获取,处理的函数。

一、Linux系统调用方式

1、文件创建:Int creat(const char *filename,mode_t mode)

Eg.(使用creat函数封装一个文件创建函数,并在主函数中调用,使用主函数所带参数来创建一个文件,并返回提示信息)

#include<stdio.h>

#include<stdlib.h>

#include<sys/types.h>

#include<sys/stat.h>

#include<fcntl.h>

void  create_file(char *filename)                     //使用creat封装的文件创建子函数

{

    if(creat(filename,0666)<0)  //creat调用如果失败,则返回-1,成功则返回大于0的值,且创建的文件具有R:4,w:2可读可写的属性。

       {

        printf("create file %s failure!\n",filename);

        exit(EXIT_FAILURE);                       //Linux系统宏定义EXIT_FAILTURE=1

    }

       else

       {

         printf("create file %ssuccess!\n",filename);

      }

}

 

int main(intargc,char *argv[])   //main函数是可以带参数的,只是我们平时习惯了不带参数,只留一个空括号,且指定main函数的第一个参数argc为int型,用于统计主函数参数的个数,且程序名本身也是一个参数。第二个参数为argv,为一个字符串型指针数组,用于指向每一个参数的开头位置。参数在程序运行时,在其后加入运行参数即是了。

{

if(argc<2) //如果除了程序本身外不带其他参数(程序名本身也是一个参数,在Linux中,第一个参数为程序运行指令,如./hello。)**疑惑一**

       {

        printf("you haven't input thefilename,please try again!\n");

        exit(EXIT_FAILURE);

      }

       create_file(argv[1]);   //使用运行命令之后的参数创建文件名

        exit(EXIT_SUCCESS); //EXIT_SUCCESS宏定义为0,所以exit(0)也是行的

}

运行:./creat hello 运行成功,则在当前工作目录下创建一个名为hello的文件。

2、文件打开:Int open(constchar* pathname,int flags)
                            Int open(const char*pathname,int flags,mode_t mode)

Eg.
Fd=open(argv[1],O_CREAT| O_RDWR,0777);        //fd为返回的文件描述符,

3、文件关闭:Int close(int fd);fd为文件描述符
Eg.cleose(fd);

4、文件读操作:Int read(int fd,const void *buf,size_t length);

5、文件写操作:Int write(int fd,const void *buf,size_t length);
注:读写都是针对文件描述符fd所指向的文件而言,即read是读fd所指向的文件,write是写fd所指向的文件

6、文件的读写指针定位:Int lseek(int fd,offset_t offset,int whence)
eg:(使用lseek函数获取文件的大小,利用该函数的返回值是读写指针相对于文件首地址的偏移)

Length=lseek(fd,0,SEEK_END)

7、文件的访问权限判断:判断某文件是否可以进行某种操作(读、写,可执行,是否存在等)
Int access(const char* pathname,int mode)

系统调用方式操作文件综合编程示例:(创建一个指定名字的新文件,并将另一个文件中的内容拷贝到新创建的文件中去)

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>    //fcntl.h,“l”不是数字1,是字母L的小写
#include <stdio.h>
#include <errno.h>
#define BUFFER_SIZE  1024 
int main(int argc,char **argv) 
{
int from_fd;
int to_fd;
char buffer[BUFFER_SIZE];
char *ptr;
int from_length,to_length;
        if(argc!=3) //如果输入的参数数目不足,则提示错误
       {
printf("Usage:%s fromfile tofile\n",argv[0]); 
exit(1);

        }  

if((from_fd=open(argv[1],O_RDONLY))<0)//open打开成功,返回文件描述符,失败则返回-1

       {
printf("Open %s Error\n",argv[1]); 
exit(1); 
       } 

if((to_fd=open(argv[2],O_WRONLY | O_CREAT,0755))<0)  //O_CREAT表示打开的文件不存在,则先创建文件,权限为755
       {
printf("Open %s Error\n",argv[2]);
exit(1); 
       } 

while(from_length=read(from_fd,buffer,BUFFER_SIZE))//循环读取,直到read函数返回-1结束循环(read函数读取成功返回读取的实际字节数,读取失败返回-1)
       {
ptr=buffer;
while(to_length=write(to_fd,ptr,from_length))//循环写,直到本次读取的数据全部写入
                 {
if(to_length==from_length) break;//写入的字节数等于读取的字节数,说明写入完成,退出一级while循环
else if(to_length<from_length)//如果写入的字节数小于读取的字节数,则写入未完成,继续写入数据
                        {

                               ptr+=from_length-to_length;//重定位开始读取buffer中数据的位置

       write(to_fd,ptr,from_length-to_length);

                               break;

                        }
else break;
                }
        }
close(to_fd);
close(from_fd);//记得关闭文件
printf("copy file successed!\n");
exit(0);
}


二、C库函数调用方式

1、文件的创建和打开:FILE *fopen(const char *filename,const “char *mode”)   //Mode有双引号,filename不可带双引号,不然也将被算作文件名的一部分。文件顺利打开

//后,指向该流的文件指针就会被返回。

2012年10月15日星期一亲测可以下载 公开视频光盘目录结构 视频1.iso -学习方法与课程体系介绍(学前必看) -学习方法介绍.avi -嵌入式课程体系.pdf -嵌入式Linux学习方法.pdf -课程1-嵌入式入门体验班(上) -第1天(嵌入式系统概述) -体验入门班-1-1(嵌入式系统概述).avi -体验入门班-1-2(ARM概述).avi -体验入门班-1-3(嵌入式Linux概述).avi -体验入门班-1-4(2440开发板介绍).avi -体验入门班-1-5(软硬件环境搭建).avi -第2天(开发板快乐体验) -体验入门班-2-1(开发板系统安装).avi -体验入门班-2-1(开发板系统安装-Jlink方式).avi -体验入门班-2-1(开发板系统安装-并口方式).avi -体验入门班-2-2(裸机程序体验).avi -体验入门班-2-3(QT系统体验).avi -体验入门班-2-4(Android系统体验).avi 视频2.iso -课程1-嵌入式入门体验班(下) -第3天(Linux系统体验) -体验入门班-3-1(Linux定制安装).avi -体验入门班-3-2(Linux命令).avi -体验入门班-3-3(VI使用).avi -体验入门班-3-4(Linux系统管理).avi -体验入门班-3-5(Shell编程).avi -体验入门班-3-6(Qcd功能演示).avi -体验入门班-3-7(必修实验).avi -课程2-嵌入式Linux应用开发班 -第1天(编程基础) -应用班-1-1(GCC程序编译).avi -应用班-1-2(GDB程序调试).avi -应用班-1-3(makefile工程管理).avi -应用班-1-4(必修实验).avi -第2天(文件时间编程) -应用班-2-1(系统调用方式访问文件).avi -应用班-2-2(库函数访问文件).avi -应用班-2-3(时间编程).avi -应用班-2-4(必修实验).avi -第3天(多进程程序设计) -应用班-3-1(进程控制原理).avi -应用班-3-2(进程控制程序设计).avi -应用班-3-3(必修实验).avi -第4天(进程间通讯) -应用班-4-1(进程间通讯概述).avi -应用班-4-2(管道通讯).avi -应用班-4-3(信号通讯).avi -应用班-4-4(共享内存通讯).avi -应用班-4-5(必修实验).avi -第5天(进程间通讯) -应用班-5-1(消息队列).avi -应用班-5-2(信号量).avi -应用班-5-3(必修实验).avi -第6天(进程间通讯) -应用班-6-1(线程基础).avi -应用班-6-2(多线程程序设计).avi -应用班-6-3(必修实验).avi -第7天(网络编程) -应用班-7-1(Linux网络概述).avi -应用班-7-2(Linux网络编程基础).avi -应用班-7-3(TCP程序设计).avi -应用班-7-4(UDP网络程序设计).avi -应用班-7-5(并发服务器).avi -应用班-7-6(必修实验).avi 视频3.iso -课程3-ARM系统进阶班 -第1天(ARM系统开发基础) -ARM系统精讲班-1-1(ADS集成开发环境).avi -ARM系统精讲班-1-2(ARM工作模式).avi -ARM系统精讲班-1-3(ARM寄存器).avi -ARM系统精讲班-1-4(ARM寻址方式).avi -ARM系统精讲班-1-5(ARM汇编指令详解).avi -第2天(ARM系统开发基础) -ARM系统精讲班-2-1(ARM汇编指令详解).avi -ARM系统精讲班-2-2(ARM伪指令).avi -ARM系统精讲班-2-3((混合编程).avi -ARM系统精讲班-1-8(必修实验).avi -第3天(LED驱动程序设计) -ARM系统精讲班-2-1(GPIO).avi -ARM系统精讲班-2-2(LED控制程序设计).avi -ARM系统精讲班-2-3((LED闪烁).avi -第4天(LED与按键驱动程序设计) -ARM系统精讲班-4-1(ARM中断控制系统).avi -ARM系统精讲班-4-2(按键控制程序设计).avi -ARM系统精讲班-2-6(必修实验).avi -第5天(定时器与时钟驱动程序设计) -ARM系统精讲班-5-1(ARM时钟体系).avi -ARM系统精讲班-5-2(定时器驱动程序设计).avi -课程4(嵌入式LINUX内核驱动进阶班-上) -第1天(内核开发基础) -内核驱动进阶班-1-1(Linux内核简介).avi -内核驱动进阶班-1-2(Linux内核源代码).avi -内核驱动进阶班-1-3(Linux内核配置与编译).avi -内核驱动进阶班-1-4(Linux内核模块开发).avi -内核驱动进阶班-1-5(必修实验).avi -第2天(U-Boot移植) -内核驱动进阶班-2-1(嵌入式linux系统架构).avi -内核驱动进阶班-2-2(交叉工具链).avi -内核驱动进阶班-2-3(Bootloader介绍).avi -内核驱动进阶班-2-4(U-Boot介绍).avi -内核驱动进阶班-2-5(U-Boot命令).avi -内核驱动进阶班-2-6(U-Boot启动流程).avi -内核驱动进阶班-2-7(Uboot移植).avi -内核驱动进阶班-2-8(必修实验).avi 视频4.iso -课程4(嵌入式LINUX内核驱动进阶班-下) -第3天(内核开发基础) -内核驱动进阶班-3-1(嵌入式linux内核制作).avi -内核驱动进阶班-3-2(根文件系统制作).avi -内核驱动进阶班-3-3(内核启动流程).avi -内核驱动进阶班-3-4(嵌入式文件系统).avi -内核驱动进阶班-3-5(必修实验).avi -第4天(内存管理子系统) -内核驱动进阶班-4-1(Linux内存管理).avi -内核驱动进阶班-4-2(进程地址空间).avi -内核驱动进阶班-4-3(内核地址空间).avi -内核驱动进阶班-4-4(Linux内核链表).avi -内核驱动进阶班-4-5(Linux内核定时器).avi -内核驱动进阶班-2-7(Uboot移植).avi -内核驱动进阶班-2-8(必修实验).avi -第5天(进程管理子系统) -内核驱动进阶班-5-1(LINUX进程控制).avi -内核驱动进阶班-5-2(LINUX进程调度).avi -内核驱动进阶班-5-3(Linux系统调用).avi -内核驱动进阶班-5-4(Proc文件系统).avi -内核驱动进阶班-5-5(内核异常分析).avi -内核驱动进阶班-5-6(必修实验).avi -第6天(简单字符设备驱动程序设计) -内核驱动进阶班-6-1(LINUX驱动程序介绍).avi -内核驱动进阶班-6-2(字符设备驱动程序设计).avi -内核驱动进阶班-6-3(字符设备驱动程序实例分析).avi -内核驱动进阶班-6-4(竞争与互斥).avi -内核驱动进阶班-6-5(必修实验).avi -第7天(高级字符设备驱动程序设计) -内核驱动进阶班-7-1(Ioctl设备控制).avi -内核驱动进阶班-7-2(内核等待队列).avi -内核驱动进阶班-7-3(阻塞型字符设备驱动).avi -内核驱动进阶班-7-4(Poll设备方法).avi -内核驱动进阶班-7-5(自动创建设备文件).avi -内核驱动进阶班-7-6(必修实验).avi
嵌入式Linux视频教程全套2011新版,强烈推荐!!! 视频1.iso -学习方法与课程体系介绍(学前必看) -学习方法介绍.avi -嵌入式课程体系.pdf -嵌入式Linux学习方法.pdf -课程1-嵌入式入门体验班(上) -第1天(嵌入式系统概述) -体验入门班-1-1(嵌入式系统概述).avi -体验入门班-1-2(ARM概述).avi -体验入门班-1-3(嵌入式Linux概述).avi -体验入门班-1-4(2440开发板介绍).avi -体验入门班-1-5(软硬件环境搭建).avi -第2天(开发板快乐体验) -体验入门班-2-1(开发板系统安装).avi -体验入门班-2-1(开发板系统安装-Jlink方式).avi -体验入门班-2-1(开发板系统安装-并口方式).avi -体验入门班-2-2(裸机程序体验).avi -体验入门班-2-3(QT系统体验).avi -体验入门班-2-4(Android系统体验).avi 视频2.iso -课程1-嵌入式入门体验班(下) -第3天(Linux系统体验) -体验入门班-3-1(Linux定制安装).avi -体验入门班-3-2(Linux命令).avi -体验入门班-3-3(VI使用).avi -体验入门班-3-4(Linux系统管理).avi -体验入门班-3-5(Shell编程).avi -体验入门班-3-6(Qcd功能演示).avi -体验入门班-3-7(必修实验).avi -课程2-嵌入式Linux应用开发班 -第1天(编程基础) -应用班-1-1(GCC程序编译).avi -应用班-1-2(GDB程序调试).avi -应用班-1-3(makefile工程管理).avi -应用班-1-4(必修实验).avi -第2天(文件时间编程) -应用班-2-1(系统调用方式访问文件).avi -应用班-2-2(库函数访问文件).avi -应用班-2-3(时间编程).avi -应用班-2-4(必修实验).avi -第3天(多进程程序设计) -应用班-3-1(进程控制原理).avi -应用班-3-2(进程控制程序设计).avi -应用班-3-3(必修实验).avi -第4天(进程间通讯) -应用班-4-1(进程间通讯概述).avi -应用班-4-2(管道通讯).avi -应用班-4-3(信号通讯).avi -应用班-4-4(共享内存通讯).avi -应用班-4-5(必修实验).avi -第5天(进程间通讯) -应用班-5-1(消息队列).avi -应用班-5-2(信号量).avi -应用班-5-3(必修实验).avi -第6天(进程间通讯) -应用班-6-1(线程基础).avi -应用班-6-2(多线程程序设计).avi -应用班-6-3(必修实验).avi -第7天(网络编程) -应用班-7-1(Linux网络概述).avi -应用班-7-2(Linux网络编程基础).avi -应用班-7-3(TCP程序设计).avi -应用班-7-4(UDP网络程序设计).avi -应用班-7-5(并发服务器).avi -应用班-7-6(必修实验).avi 视频3.iso -课程3-ARM系统进阶班 -第1天(ARM系统开发基础) -ARM系统精讲班-1-1(ADS集成开发环境).avi -ARM系统精讲班-1-2(ARM工作模式).avi -ARM系统精讲班-1-3(ARM寄存器).avi -ARM系统精讲班-1-4(ARM寻址方式).avi -ARM系统精讲班-1-5(ARM汇编指令详解).avi -第2天(ARM系统开发基础) -ARM系统精讲班-2-1(ARM汇编指令详解).avi -ARM系统精讲班-2-2(ARM伪指令).avi -ARM系统精讲班-2-3((混合编程).avi -ARM系统精讲班-1-8(必修实验).avi -第3天(LED驱动程序设计) -ARM系统精讲班-2-1(GPIO).avi -ARM系统精讲班-2-2(LED控制程序设计).avi -ARM系统精讲班-2-3((LED闪烁).avi -第4天(LED与按键驱动程序设计) -ARM系统精讲班-4-1(ARM中断控制系统).avi -ARM系统精讲班-4-2(按键控制程序设计).avi -ARM系统精讲班-2-6(必修实验).avi -第5天(定时器与时钟驱动程序设计) -ARM系统精讲班-5-1(ARM时钟体系).avi -ARM系统精讲班-5-2(定时器驱动程序设计).avi -课程4(嵌入式LINUX内核驱动进阶班-上) -第1天(内核开发基础) -内核驱动进阶班-1-1(Linux内核简介).avi -内核驱动进阶班-1-2(Linux内核源代码).avi -内核驱动进阶班-1-3(Linux内核配置与编译).avi -内核驱动进阶班-1-4(Linux内核模块开发).avi -内核驱动进阶班-1-5(必修实验).avi -第2天(U-Boot移植) -内核驱动进阶班-2-1(嵌入式linux系统架构).avi -内核驱动进阶班-2-2(交叉工具链).avi -内核驱动进阶班-2-3(Bootloader介绍).avi -内核驱动进阶班-2-4(U-Boot介绍).avi -内核驱动进阶班-2-5(U-Boot命令).avi -内核驱动进阶班-2-6(U-Boot启动流程).avi -内核驱动进阶班-2-7(Uboot移植).avi -内核驱动进阶班-2-8(必修实验).avi 视频4.iso -课程4(嵌入式LINUX内核驱动进阶班-下) -第3天(内核开发基础) -内核驱动进阶班-3-1(嵌入式linux内核制作).avi -内核驱动进阶班-3-2(根文件系统制作).avi -内核驱动进阶班-3-3(内核启动流程).avi -内核驱动进阶班-3-4(嵌入式文件系统).avi -内核驱动进阶班-3-5(必修实验).avi -第4天(内存管理子系统) -内核驱动进阶班-4-1(Linux内存管理).avi -内核驱动进阶班-4-2(进程地址空间).avi -内核驱动进阶班-4-3(内核地址空间).avi -内核驱动进阶班-4-4(Linux内核链表).avi -内核驱动进阶班-4-5(Linux内核定时器).avi -内核驱动进阶班-2-7(Uboot移植).avi -内核驱动进阶班-2-8(必修实验).avi -第5天(进程管理子系统) -内核驱动进阶班-5-1(LINUX进程控制).avi -内核驱动进阶班-5-2(LINUX进程调度).avi -内核驱动进阶班-5-3(Linux系统调用).avi -内核驱动进阶班-5-4(Proc文件系统).avi -内核驱动进阶班-5-5(内核异常分析).avi -内核驱动进阶班-5-6(必修实验).avi -第6天(简单字符设备驱动程序设计) -内核驱动进阶班-6-1(LINUX驱动程序介绍).avi -内核驱动进阶班-6-2(字符设备驱动程序设计).avi -内核驱动进阶班-6-3(字符设备驱动程序实例分析).avi -内核驱动进阶班-6-4(竞争与互斥).avi -内核驱动进阶班-6-5(必修实验).avi -第7天(高级字符设备驱动程序设计) -内核驱动进阶班-7-1(Ioctl设备控制).avi -内核驱动进阶班-7-2(内核等待队列).avi -内核驱动进阶班-7-3(阻塞型字符设备驱动).avi -内核驱动进阶班-7-4(Poll设备方法).avi -内核驱动进阶班-7-5(自动创建设备文件).avi -内核驱动进阶班-7-6(必修实验).avi
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值