Linux下I/O编程

2023-12-16 17:38:51

系统调用

在 Linux 中,为了更好地保护内核空间,将程序的运行空间分为内核空间和用户空间
(也就是常称的内核态和	用户态),它们分别运行在不同的级别上,在逻辑上是
相互隔离的。因此,用户进程在通常情况下不允许访问内核数据,也无法使用内核函数,它们只能在用户空间操作用户数据,调用用户空间的函数。

常见的文件I/O

/***************************open And close *********************/
   int open(const char *pathname, int flags);
   int open(const char *pathname,	//路径
  				  int flags, 						//模式(是指对文件内容)
   				  mode_t mode				//文件权限(仅创建文件有效)
	);		//创建/读写文件时都可用次函数

   int creat(const char *pathname,	//路径
    		mode_t mode						//文件权限
    );
	
	int close(
					int fd;		//文件描述符
	);

/****************************read****************************/
   int open(const char *pathname, int flags);
   int open(const char *pathname,	//路径
  				  int flags, 						//模式(是指对文件内容)
   				  mode_t mode				//文件权限(仅创建文件有效)
	);		//创建/读写文件时都可用次函数

   int creat(const char *pathname,	//路径
    		mode_t mode						//文件权限
    );
	
	int close(
					int fd;		//文件描述符
	);


/****************************write****************************/
ssize_t write(									//返回成功写入的字节数,否则返回-1
       					int fd,					//文件描述符
       					const void *buf,		//缓冲区
       				 	size_t count			//期望写入的字节数
);
/**********************fcntl(文件操作)*******************************/
   #include <unistd.h>
   #include <fcntl.h>

   int fcntl(
   				int fd,		//文件描述符
    			int cmd,	//操作指令
     			... /* arg */	//可变参数,因操作指令而异
      );


/****************************lseek**********************************/
1.每个打开的文件都有一个与其相关的相关的“文件位置”。(相同文件以不同的模式打开,文件起始位置可能不同,例如指定了O_APPEND 追加,文件位置在最后)
2.lseek函数仅将文件位置记录在内核中,并不引发任何I/0动作。
3.在超越文件尾的文件位置写入数据,将在文件中形成空洞。
4.文件空洞不占用磁盘空间,但被算在文件大小内。

off_t lseek(
			int fd,				//文件描述符
			off_t offset,		//偏移量
 			int whence			//起始位置
 );
//除非文件模式为 O_APPEND追加模式,否则文件位置一律为0。	
SEEK_SRT		文件头
SEEK_CUR		当前位置
SEEK_END		从文件尾


/*********************************dup/dup2**********************/
	//成功返回oldfd的副本,失败返回-1
   int dup(int oldfd);		//返回一个未被使用的最小文件描述符,且文件已打开		
   int dup2(int oldfd, int newfd);//可以指定文件描述符的值,若描述符已打开,则先关闭,返回文件描述副本。

文章来源:https://blog.csdn.net/qq_52575999/article/details/135034942
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。