您的位置:首页 > 运维架构 > Linux

Linux下文件编程实验

2013-01-15 10:28 274 查看
这部分不难但很重要 ,涉及到以后的驱动程序。主要有三个知识点系统调用、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)综合——实现复制文件

[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]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息