这部分不难但很重要 ,涉及到以后的驱动程序。主要有三个知识点系统调用、C语言库函数访问文件和时间编程。
(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)综合——实现复制文件
- #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;
- #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);
- }