Linux系统调用级别的函数有许多,这里只说明open(),close(),lseek(),write()和read()函数。
open()原型
int open(const char *pathname,flags,intperms)
参数定义:
pathname:路径名,例子: “/tmp/working/open.c”
flags:文件打开方式。
O_RDONLY: 只读方式
O_WRONLY:只写方式
O_RDWR:读写方式 这三个是不能同时存在
O_CREAT:如果路径下没有该文件,如没有open.c,则创建open.c文件。
O_EXCL:如果使用了O_CREAT这个参数且文件存在时,返回错误。
O_NOCTTY:
O_TRUNC:如果文件存在,并且以只读或者只写成功打开,则会删除文件的数据。
O_APPEND:以添加方式打开文件,在打开文件的同时,文件指针指向文件的末尾。
perms:打开的存取权限。
返回值:成功:文件描述符
失败:-1
close()原型:
int close(int fd)
fd是文件描述符,是open()函数的返回值。
返回值:成功:0
失败:-1
#include
#include
#include
#include
#include
#include
int main()
{
intfd;
if((fd= open("./hello.txt" , O_CREAT | O_TRUNC | O_WRONLY , 0666)) < 0)
{
perror("open:");
exit(1);
}
else
{
printf("Openfile : hello.c %d\n",fd);
}
if(close(fd) < 0 )
{
perror("close:");
exit(1);
}
else
{
printf("Closehello.c\n");
}
exit(0);
}
上面的程序起打开文件作用,如果没有,就创建。
read()函数
原型:ssize_t read(int fd,void *buf,size_t count)
fd:文件描述符
buf:指定存储器读出数据的缓存区
count:指定读出的字节数
返回值:
成功:读到的字节数。
0:达到了文件尾
-1:出错
write()函数
原型:ssize_t write(int fd,void *buf,size_t count)
fd:文件描述符
buf:指定存储器写入数据的缓冲区
count:指定读出的字节数
返回值:
成功:已经写入的字数
-1:出错
lseek:
原型:off_t lseek(int fd,off_t offset,int whence)
fd:文件描述符
offset:偏移量,单位是字节,可正可负。
whence:
SEEK_SET:文件头
SEEK_CUR:但钱位置
SEEK_END:文件尾
返回值:成功:文件当前位置
-1:出错
write.c文件
#include
#include
#include
#include
#include
#include
#include
int main(void)
{
inti,fd,size,len;
char*buf="Hello world,I will write this file!";
if((fd= open("./hello.txt",O_CREAT | O_TRUNC | O_RDWR,0777 ))<0)
{
perror("open:");
exit(1);
}
else
printf("openhello.txt %d\n:",fd);
len= strlen(buf);
if((size=write( fd , buf , len )) < 0 )
{
perror("write:");
exit(1);
}
else
printf("Write%s \n",buf);
if(close(fd) < 0 )
{
perror("close:");
exit(1);
}
else
printf("Closehello.txt\n");
exit(0);
}
上面的程序就是创建一个文件,写入buf里面的内容。
read.c文件
#include
#include
#include
#include
#include
#include
#include
int main(void)
{
intfd,len,size;
charbuf_r[100];
//if((fd=open("./hello.c",O_CREAT| O_RDWR,0777))<0)
if((fd= open("./hello.txt",O_CREAT | O_RDWR,0777 ))<0)
{
perror("open");
exit(1);
}
else
printf("openthe file hello.txt \nfd is %d \n",fd);
len= lseek(fd,0,SEEK_END);
printf("lenis %d\n",len);
lseek(fd,0,SEEK_SET);
if((size= read(fd,buf_r,len))<0)
{
perror("read");
exit(1);
}
else
{
buf_r[len]='\0';
printf("sizeis %d\n",size);
printf("readfile is %s\n",buf_r);
}
if(close(fd)<0)
{
perror("close");
exit(1);
}
else
printf("thefile is close\n");
exit(0);
}
其中len = lseek(fd,0,SEEK_END);
这段是测试文件长度的程序。