TCP/IP网络编程笔记Chapter I -1基于Linux的文件操作

TCP/IP网络编程笔记Chapter I -1基于Linux的文件操作

  • 1.总述
    • (1)打开文件
    • (2)关闭文件
    • (3)写入文件
    • (4)读取数据
  • 2.应用
    • (1)创建文件并保存数据
    • (2)通过read函数读取data.txt中保存的数据

1.总述

Linux下一切都是文件 ,对于文件的操作,我们需要用文件操作符来指定。文件一般经过创建过程才会分配文件描述符,可以把它理解为方便称呼操作系统创建的文件而赋予的数。

文件描述符fd 对象
0 标准输入
1 标准输出
2 标准错误

(1)打开文件

需要的头文件:#include,#include,#include
函数原型:
int open(const char *path,int flag)

  • 成功时返回文件描述符、失败返回-1
  • path指文件名的字符串地址
  • flag是文件打开模式信息
    TCP/IP网络编程笔记Chapter I -1基于Linux的文件操作_第1张图片
    eg
	int fd;
	fd = open("data.txt",O_CREAT|O_WRONLY|O_TRUNC);
	//文件名为data.txt。必要时创建、只写、删除现有数据 
	if(fd == -1)	//打开失败 
		//do something

(2)关闭文件

所需头文件#include
函数原型int close(int fd)

  • 成功时返回0,失败时返回-1
  • fd是需关闭文件的文件描述符

egclose(fd);

(3)写入文件

所需头文件#include
函数原型ssize_t write(int fd,const void* buf,size_t nbytes)

  • 成功时返回写入的字节数,失败返回-1
  • fd是文件描述符
  • buf是保存数据的缓冲地址值
  • nbytes 传输数据的字节数
  • ssize_t是通过typedef声明的signed int类型

eg

	int fd;
	char buf[]="Lets go!\n";
	if(write(fd,buf,sizeof(buf)) == -1)
		//do something

(4)读取数据

所需头文件#include
函数原型ssize_t read(int fd,void* buf,size_t nbytes);

  • 成功时返回接收的字节数(遇到文件结尾返回0),失败返回-1
  • fd是文件描述符
  • buf是保存接收数据的缓冲地址值
  • nbytes 传输数据的字节数

2.应用

(1)创建文件并保存数据

创建.c文件
在这里插入图片描述

touch low_open.c

使用vim编辑

vim low_open.c 
#include
#include
#include
#include
void error_handling(char* message);

int main()
{
     
	int fd;
	char buf[]="Lets go!\n";
	fd = open("data.txt",O_CREAT|O_WRONLY|O_TRUNC);//必要时创建、只写、删除现有数据 
	if(fd == -1)						//打开失败 
		error_handling("open() error");
	printf("file descriptor: %d \n",fd);//输出文件描述符 
	if(write(fd,buf,sizeof(buf)) == -1)
		error_handling("write() error");
	close(fd);							//使用文件后必须关闭 
	return 0;

}
void error_handling(char* message)
{
     
	fputs(message,stderr);//把message写到指定流 
	fputc('\n',stderr);
	exit(1);
}

编译

gcc low_open.c  -o lopen

运行

./lopen

返回的文件描述符是3
在这里插入图片描述
此时当前目录下有三个文件ls命令查看,open函数新生成了一个data.txt
在这里插入图片描述
查看data.txt

cat data.txt

在这里插入图片描述

(2)通过read函数读取data.txt中保存的数据

同样创建low_read.c编译运行

#include
#include
#include
#include
#define BUF_SIZE 100
void error_handling(char* message);
int main()
{
     
	int fd;
	char buf[BUF_SIZE];
	fd = open("data.txt",O_RDONLY);
	if(fd == -1)
		error_handling("open() error");
	printf("file descriptor: %d \n",fd);
	if(read(fd,buf,sizeof(buf)) == -1)
		error_handling("read() error");
	printf("file data: %s",buf);
	close(fd);
	return 0;
				
}
void error_handling(char* message)
{
     
	fputs(message,stderr);
	fputc('\n',stderr);
	exit(1);
}

在这里插入图片描述
在这里插入图片描述

你可能感兴趣的:(TCP/IP网络编程,linux,c++)