linux应用程序开发一,文件编程——知识要点

系统调用-创建文件

int creat(const char  *filename, mode_t mode)

filename:要创建的文件名(包含路径,缺省为当前路径)


mode:创建模式


常见的创建模式 :

宏代码                    数字代替

S_IRUSR    可读         4

S_IWUSR    可写        2

S_XUSR      可执行     1

S_IRWXU    可读,写,执行  6


如果是0,这表示没有权限!


示例代码:

file_creat.c

#include<stdio.h>
#include<stdlib.h>

#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>          //注意这里不是fcnt1是fcuntl,不是数字1,是字母l

void create_file(char *filename)
{
	if(creat(filename,0755) < 0)
	{
		printf("creat 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);
}


 系统调用-打开

int open(const char *pathname,int flags);
int open(const char *pathname, int flags, mode_t mode);

pathname:要打开的文件名(包含路径,缺省为当前路径)
flags:打开标志

常见的打开标志:
O_RDONLY     只读方式打开
O_WRONLY    只写方式打开
O_RDWR         读写方式打开
O_APPEND     追加方式打开
O_CREAT        创建一个文件
O_NOBLOCK  非阻塞方式打开


O_CREAT 如果打开文件不存在就会创建一个文件;
如果使用O_CREAT就要使用3个参数的OPEN,需要指定mode来表示文件的访问权限。

示例代码:
open.c

#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表示,该文件如果不存在,系统则创建该文件,该文件的权限由第三个参数指定
	//如果没有O_CREAT参数,则不需要第三个参数,没有文件会报错。
	//fd = open(argv[1],O_CREAT|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);

}



系统调用----关闭文件:

int close(int fd);

fd是open函数的返回值。



系统调用----读:

int read(int fd, const void *buf, size_t length)
功能:
从文件描述符fd所指定的文件中读取
length个字节到buf所指向的缓冲区中,
返回值为实际读取的字节数。



系统调用----写:
int write(int fd, const void *buf, size_t length)
功能:
把length个字节从buf指向的缓冲区中写
到文件描述符fd所指向的文件中,返回
值为实际写入的字节数。


系统调用----定位:
int lseek(int fd, offset_t offset, int whence)
功能:
将文件读写指针相对whence移动offset
个字节。操作成功时,返回文件指针相
对于文件头的位置。


whence可使用下述值:
SEEK_SET:相对文件开头
SEEK_CUR:相对文件读写指针的当前位置
SEEK_END:相对文件末尾
offset可取负值,表示向前移动。例如下述调用
可将文件指针相对当前位置向前移动5个字节:
lseek(fd, -5, SEEK_CUR)


lseek(fd,0,SEEK_END) 用这个语句的返回值可以检测出fd指向的文件的长度。


有时我们需要判断文件是否可以进行某种操作(读,写
等),这时可以使用access函数:
int access(const char*pathname,int mode)
pathname:文件名称
mode:要判断的访问权限。可以取以下值或者是他们的
组合。R_OK:文件可读,W_OK:文件可写,
X_OK:文件可执行,F_OK文件存在。
返回值:当我们测试成功时,函数返回0,否则如果一个条
件不符时,返回-1。





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值