linux应用程序开发-文件编程-系统调用方式
在看韦东山视频linux驱动方面有一些吃力,究其原因,虽然接触过linux应用程序编程,但是没有深入去理解,相关函数用法不清楚,正好看到国嵌视频对这一方面讲的比较透彻,
所以把学习过程记录下来,也作为linux应用程序开发的一个系列吧!
文件编程有两种方式,一是系统调用方式,二是库函数调用。
前者依赖特定的平台,后者不依赖平台。
系统调用:创建
int creat(const char *filename,mode_t mode);
filename:要创建的文件名
mode:创建模式
S_IRUSR->1
S_IWUSR->2
S_IWXUSR->4
S_IRWXU->7
系统调用举例:
#include <stdio.h>
#include<stdlib.h>
#include<sys/types.h>
#include<fcntl.h>
void create_file(char *filename)
{
if(creat(fileanme.,0755)<0)
{
printf("create file %s is failuer!\n",filename);
}
else
{
printf("create file %s is success!\n",filename)
}
}
int main(int argc,char *argv[])
{
int i;
if(argc<2)
{
perror("you haven‘t input the filename ,please try agin!\n");
exit(EXIT_FAILUER);
}
for(i=1;i<argc;i++)
{
create_file(argv[i]);
}
exit(EXIT_SUCCESS);
}
文件描述:文件描述符 范围0-OPEN-MAX。早期允许每个进程打开20个。现在有些增长到1024个。
系统调用-打开
int open(const char*pathname,int flags);
int open(const cahr*pathname,int falgs,mode_t mode);
flags:打开标志
O_RDONLY
O_WRONLY
O_RDWR
O_APPEBD:追加方式打开
O_CREAT:必须使用函数 int open(const cahr*pathname,int falgs,mode_t mode);
O_NOBLOCK:非阻塞方式打开
举例:
#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 yhe open file pathname!\n");
exit(1);
}
if((fd=open(argv[1],O_CREAT|)CREAT_ORDWR,0755)<0)
{
perror("open file failuer!\n");
exit(1);
}
else
{
printf("open file %d is success!\n",fd);
}
close(fd);
exit(0);
}
文件关闭:
int close(fd);
系统调用-读
int read(int fd ,const void *buf,size_t length);
从文件描述符fd所指定的文件中读取length个字节到buf所指定的缓冲区,返回实际读取的字节数。
写:int write(int fd ,const void *buf,size_t length);
定位:
int lseek(int fd,offset_t offset,int whence);
将文件读写指针相对于whence移动offset个字节。操作成功时,返回文件指针相对于文件头的位置。
whence:
SEEK_SET:相对文件开头
SEEK_CUR:相对文件读写指针的当前位置
SEEK_END:相对文件末尾
计算文件长度:
系统调用-访问判断:
int access(const char*pathname,int mode);
mode:要判断的访问权限。可以取以下值或他们的组合
R_OK
W_OK
X_OK
F_OK:文件存在
成功返回0,否则条件不符合则返回1。
举例:
#include<unistd.h>
int main()
{
if(access("/etc/passwd",R_OK)==0)
printf("/etc/passwd can be read!"\n);
}
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。