Linux系统调用之文件函数

先说明可用的文件I/O函数——打开文件,读文件,写文件等。

但是在Linux中大多数文件I/O只需要用到5个函数:open、read、write、lseek及close。

一、open函数

调用open函数可以打开或创建一个文件。

返回值:若成功则返回文件描述符,若出错则返回-1

参数列表:

①pathname是要打开或创建文件的名字。

②flags可用来说明此函数的多个选项,用下列一个或多个常量进行“或”运算。

O_RDONLY,只读打开。 O_WRONLY,只写打开。O_RDWR,读写打开。

上面三个常量是必选的,下面的是可选的,我列出了几个后面我用到的。

O_APPEND,每次写都追加到文件的尾端。

O_CREAT,若此文件不存在,则创建它。如果创建了文件,必须进行使用第三个参数,制定其权限。

O_TRUNC,如果此文件存在,而且为只读或只写成功打开,则其长度置为零。

③mode:只有当选用了O_CREAT参数后,就需要从第三个参数指定创建的文件的属性,如(0600,此文件的属主用户可读可写)

二、read函数

调用read函数从打开文件中读数据。

返回值:若成功则返回读到的字节数,若已到文件结尾则返回0,若出错则返回-1

参数列表:

①fd:需要读取的文件的文件描述符(可参考我的博客,文件描述符)

②buf:读取出的字节,临时存放在buff里面

③count:读取的字节数

三、write函数

调用write函数向打开的文件写数据

返回值:若成功则返回读到的字节数,若出错则返回-1

参数列表:

①fd:需要写入的文件的文件描述符(可参考我的博客,文件描述符)

②buf:读取出的字节,临时存放在buff里面,所以从buf里面读取需要写入的数据

③count:写入的字节数

四、lseek函数

可以调用lseek显式地为一个打开的文件设置其偏移量

返回值 :若成功则返回新的文件偏移量,若出错则返回-1

参数列表:

①fd:需要偏移文件内指针的文件的文件描述符

②/③:若whence是SEEK_SET,则将该文件的偏移量设置为距文件开始处offset个字节。

若whence是SEEK_CUR,则将该文件的偏移量设置为其当前值加offset,offset可正可负。

若whence是SEEK_END,则将该文件的偏移量设置为文件长度加offset,offset可正可负。

五、close函数

可调用close函数关闭一个打开的文件

返回值:若成功则返回0,若出错则返回-1

参数列表:需要关闭的打开文件的文件描述符。

六、使用系统调用函数的copy文件

#include <stdio.h>
#include <fcntl.h>
#include <string.h>
#include <assert.h>
#include <stdlib.h>

int main(int argc, char * argv[])
{
	if(argc < 3)
	{
		printf("error!\n");
		exit(1);
	}

	int fdr = open(argv[1], O_RDONLY);
	assert(fdr != -1);

	int fdw = open(argv[2], O_WRONLY | O_CREAT, 0600);
	assert(fdw != -1);

	char buff[256] = {0};
	int num = 0;
	while((num = read(fdr, buff, 256)) > 0)
	{
		write(fdw, buff, num);
	}

	close(fdr);
	close(fdw);
	exit(0);	
}

 运行结果如图所示(未显示完整截图),执行copy,将/etc/passwd传给argv[1],将./newpasswd传给argv[2],拷贝成功。

猜你喜欢

转载自blog.csdn.net/HDong99/article/details/84973746