Linux下文件编程实验
2013-01-15 10:28
274 查看
这部分不难但很重要 ,涉及到以后的驱动程序。主要有三个知识点系统调用、C语言库函数访问文件和时间编程。
(1)创建文件
(2)打开文件
[/code]
[/code]
(1)创建文件
#include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> void create_file(char *filename){ /*创建的文件具有什么样的属性?*/ if(creat(filename,0755)<0){ printf("create file %s failure!\n",filename); exit(EXIT_FAILURE); }else{ printf("create file %s success!\n",filename); } } int main(int argc,char *argv[]){ int i; if(argc<2){ perror("you haven't input the filename,please try again!\n"); exit(EXIT_FAILURE); } for(i=1;i<argc;i++){ create_file(argv[i]); } exit(EXIT_SUCCESS); }
(2)打开文件
#include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> int main(int argc ,char *argv[]){ int fd; if(argc<2){ puts("please input the open file pathname!\n"); exit(1); } //如果flag参数里有O_CREAT表示,该文件如果不存在,系统则会创建该文件,该文件的权限由第三个参数决定,此处为0755 //如果flah参数里没有O_CREAT参数,则第三个参数不起作用.此时,如果要打开的文件不存在,则会报错. //所以fd=open(argv[1],O_RDWR),仅仅只是打开指定文件 if((fd=open(argv[1],O_CREAT|O_RDWR,0755))<0){ perror("open file failure!\n"); exit(1); }else{ printf("open file %d success!\n",fd); } close(fd); exit(0); } (3)综合——实现复制文件 [code]#include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <stdio.h> #include <errno.h> #define BUFFER_SIZE 1024 int main(int argc,char **argv) { int from_fd,to_fd; int bytes_read,bytes_write; char buffer[BUFFER_SIZE]; char *ptr; if(argc!=3) { fprintf(stderr,"Usage:%s fromfile tofile/n/a",argv[0]); exit(1); } /* 打开源文件 */ if((from_fd=open(argv[1],O_RDONLY))==-1) { fprintf(stderr,"Open %s Error:%s/n",argv[1],strerror(errno)); exit(1); } /* 创建目的文件 */ if((to_fd=open(argv[2],O_WRONLY|O_CREAT,S_IRUSR|S_IWUSR))==-1) { fprintf(stderr,"Open %s Error:%s/n",argv[2],strerror(errno)); exit(1); } /* 以下代码是一个经典的拷贝文件的代码 */ while(bytes_read=read(from_fd,buffer,BUFFER_SIZE)) { /* 一个致命的错误发生了 */ if((bytes_read==-1)&&(errno!=EINTR)) break; else if(bytes_read>0) { ptr=buffer; while(bytes_write=write(to_fd,ptr,bytes_read)) { /* 一个致命错误发生了 */ if((bytes_write==-1)&&(errno!=EINTR))break; /* 写完了所有读的字节 */ else if(bytes_write==bytes_read) break; /* 只写了一部分,继续写 */ else if(bytes_write>0) { ptr+=bytes_write; bytes_read-=bytes_write; } } /* 写的时候发生的致命错误 */ if(bytes_write==-1)break; } } close(from_fd); close(to_fd); exit(0); } (4)时间编程#include <time.h> #include <stdio.h> int main(void){ struct tm *local; time_t t; /* 获取日历时间 */ t=time(NULL); /* 将日历时间转化为本地时间 */ local=localtime(&t); /*打印当前的小时值*/ printf("Local hour is: %d\n",local->tm_hour); /* 将日历时间转化为格林威治时间 */ local=gmtime(&t); printf("UTC hour is: %d\n",local->tm_hour); return 0;
[code]#include <time.h>
#include <stdio.h>
int main(void)
{
struct tm *ptr;
time_t lt;
/*获取日历时间*/
lt=time(NULL);
/*转化为格林威治时间*/
ptr=gmtime(<);
/*以格林威治时间的字符串方式打印*/
printf(asctime(ptr));
/*以本地时间的字符串方式打印*/
printf(ctime(<));
return 0;
#include <sys/time.h> #include <stdio.h> #include <stdlib.h> #include <math.h> /* 算法分析 */ void function() { unsigned int i,j; double y; for(i=0;i<1000;i++) for(j=0;j<1000;j++) y++; } main() { struct timeval tpstart,tpend; float timeuse; gettimeofday(&tpstart,NULL); // 开始时间 function(); gettimeofday(&tpend,NULL); // 结束时间 /* 计算执行时间 */ timeuse=1000000*(tpend.tv_sec-tpstart.tv_sec)+ tpend.tv_usec-tpstart.tv_usec; timeuse/=1000000; printf("Used Time:%f\n",timeuse); exit(0); }
[/code]
[/code]
相关文章推荐
- UNIX-LINUX C语言编程->实验室->多次打开文件实验
- Linux下文件编程实验
- linux下文件编程
- linux编程学习--常见文件目录操作
- Linux系统编程:标准IO操作--索引对应路径下的文件
- linux编程之文件操作
- Linux 之文件编程(二)
- Linux下Makefile文件的编程基础
- 转Linux下C编程实现之文件系统
- 【Linux系统编程】Linux 可执行文件结构与进程结构
- Linux小实验之统计文件与压缩
- linux编程头文件所在路径的问题
- Linux文件编程之【系统调用】—— lseek()
- Linux下文件编程(3)
- Linux环境编程之文件I/O(二):文件的打开与关闭
- Linux下C语言编程--文件的操作
- (Linux高级编程)读写文件
- 文件I/O编程学习笔记一(基于linux系统的文件编程)
- Linux下C编程入门(.h文件,.c文件,以及多文件调用的方式)
- 文件I/O编程学习笔记三(linux 时间编程)