今天在图书馆看了国嵌 linux应用编程 利用系统调用对文件进行操作,总结一下自己认为重要的几点。
1.打开文件(可以用来创建文件)int open(int*filename,RDONLY|WRONLY|RDWR),如果要打开一个不存在的文件,相当于创建一个文件,则需要添加一个文件权限的参数(如:0777)。~chmod
2.读取文件中的信息 以及向文件中写入信息。int read(int*filename,buffer,size),表述比较简略,基本意思是从filename中读取size大小的文件 到buffer中,返回值为读出的文件大小;int write(int*filename,buffer,size),表示从buffer中 提取size大小的字节写到filename中。
下面程序是实现copy功能,其中有点小地方不懂,太晚了明天搞。
-
#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,bytes_read,bytes_write;
-
char buffer[BUFFER_SIZE];
-
char *ptr;
-
if(argc!=3){
-
printf("the function of file_cp need two files\n");
-
exit(1);
-
}
-
if((from_fd=open(argv[1],O_RDONLY))==-1)
-
{
-
printf("open file %s failed\n",argv[1]);
-
exit(1);
-
}
-
if((to_fd=open(argv[2],O_CREAT|O_WRONLY,0777))==-1)
-
{
-
printf("open file2 %s failed\n",argv[2]);
-
exit(1);
-
}
-
while(bytes_read=read(from_fd,buffer,BUFFER_SIZE))
-
{
-
if((bytes_read==-1)&&(errno!=EINTR)) break; /*don't understand~*/
-
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; /*don't understand*/
-
}
-
}
-
}
-
}
-
close(from_fd);
-
close(to_fd);
-
exit(0); /*the diffrence between exit(0) and (1) find it~!!*/
-
}
阅读(625) | 评论(0) | 转发(0) |