首页 > 系统相关 >Linux高性能服务器编程阅读1:

Linux高性能服务器编程阅读1:

时间:2023-08-29 13:34:17浏览次数:43  
标签:文件 函数 dup2 编程 描述符 fd Linux oldfd 服务器

Linux:所有东西都是文件。socket也是可读,可写,可控制,可编程的文件描述符。

I/O高级函数:

1.pipe()和dup()/dup2()

pipe()函数创建的两个文件描述符fd[0]和fd[1]分别构成管道的两端,往fd[1]中写入的数据可以从fd[0]中读出。且,fd[1]只能写入数据,fd[0]只能读出数据,不能颠倒。

dup和dup2函数将标准输入重定向到一个文件,或者将标准输出重定向到一个网络连接。

dup,dup2都是属于创建文件描述符的函数,所以返回值也是一个文件描述符。

dup(oldfd)执行以后会返回一个新的并且是当前系统可用的最小整数值作为新的文件描述符,此时这个新的文件描述符将指向oldfd指向的同一个文件,共享所有的锁定、读写和各项权限和标志位。dup(oldfd,newfd)的意思就是,将文件描述符newfd指向oldfd(或者说oldfd被复制之后新的文件描述符被设定为newfd),dup2多出来的就是第二个参数可以指定新文件描述符的数值,因此dup2的返回值一定是不小于newfd的整数数值的。

2. sendfile函数和mmap函数,splice和tee函数

sendfile函数在两个文件描述符之间直接传递数据(完全在内核中操作),从而避免了内核缓冲区和用户缓冲区之间的数据拷贝,效率很高,这被称为零拷贝。

mmap函数和munmap函数:

mmap申请一段内存空间,我们可以将这段内存空间作为进程间通信的的共享内存,可以直接将文件映射到这段内存中。

munmap函数则释放这段内存空间。

splice在两个文件描述符之间传输数据,也是零拷贝操作。

tee在两个文件描述符之间复制数据,也是零拷贝操作。

3. fcntl函数:控制文件描述符

Linux服务器程序规范:

日志:rsyslogd既能接受用户进程输出的日志,又能接受内核日志。

用户进程输出:syslog函数

内核日志:rklogd

 用户信息:

euid和uid:

euid:有效uid,文件所有者

uid:真实用户id,运行该文件的用户id

改变工作目录和根目录:getcwd()和chdir()

服务器程序后台化:daemon()函数

 

标签:文件,函数,dup2,编程,描述符,fd,Linux,oldfd,服务器
From: https://www.cnblogs.com/ustc2122zy/p/17664065.html

相关文章

  • 01 linux 定时任务之关机
    定时关机例:设置在每天03:00定时关机在Linux系统终端执行以下代码 sudo-s#进入rootsudogedit/etc/crontab#编辑/etc/crontab 在打开的窗口添加以下内容,保存并退出  0003***root/sbin/shutdown-hnow#......
  • Web服务器项目详解
    文章目录一、新连接到来的处理流程二、Channel、TcpConnection、TcpServer、Poller、EventLoop类详解1、Channel类2、TcpConnection类3、TcpServer类4、Poller类5、EventLoop类三、这几个类之间的关系一、新连接到来的处理流程一个新的连接到来后,首先被MainReactor接收,然后通过轮......
  • linux之将程序改为系统启动&开机自动启动
    1.sudovim/etc/systemd/system/django_ops.service2.填入以下内容[Unit]Description=MyCustomServiceAfter=network.target[Service]ExecStart=/data/soft/django_ops/django_ops.shRestart=always[Install]WantedBy=multi-user.targetViewCode3.所用脚本内......
  • Linux 中的内存(cache,buffer,)
    在Linux系统中,为了提高文件系统性能,内核利用一部分物理内存分配出缓冲区,用于缓存系统操作和数据文件,当内核收到读写的请求时,内核先去缓存区找是否有请求的数据,有就直接返回,如果没有则通过驱动程序直接操作磁盘。内存查看当我们使用free-h命令时,会显示如下的信息t......
  • linux swap 内存交换分区 详细介绍
    目录1、什么是SWAP,到底是干嘛的?为什么要进行内存回收?会回收的两种内存2、swappiness到底是用来调节什么的?那么这个swappiness到底起到了什么作用呢?3、kswapd什么时候会进行swap操作?4、什么是内存水位标记?(watermark)相关参数设置swap的相关操纵命令5、swap分区的优先级......
  • linux(ubuntu)能ping ip,不能ping域名。无法解析域名DNS指向127.0.0.53问题处理
    故障现象:无法上网。ping互联网ip地址能通信,ping域名无法解析。用nslookupwww.qq.com返回127.0.0.53无法解析的问题。重启无法解决。编辑/etc/resolved.conf配置文件dns写的127.0.0.53.直接添加新的dns,果reboot重启之后,还是原来的内容不变首先修改/etc/systemd/resolved.conf文件......
  • HTTP服务器项目面试题
    ......
  • Linux系统使用中常见的问题
    文章目录1、安装某个软件时提示:现在没有可用的软件包但是它被其他软件占用了2、安装vim3、安装搜狗输入法4、vim全局替换5、linux环境变量的设置6、运行c/c++程序7、linux中g++支持C++11的方法(在头文件中包含)8、安装git1、安装某个软件时提示:现在没有可用的软件包但是它被其他软......
  • Web服务器项目中常问的开放性问题
    文章目录一、对后端开发的看法?二、为什么要做静态http服务器?三、为什么要使用ET模式?四、多线程编程的注意事项1、为什么要用多线程2、多线程编程的特点3、确保线程安全的几种方式4、与多线程有关的编程方法五、使用Linux系统有什么好处?六、对云计算的看法?七、服务器突然崩溃退出,怎......
  • Java并发编程的挑战与解决方案
    Java并发编程是一个复杂而重要的主题,开发者在处理并发场景时经常面临各种挑战。本文将讨论Java并发编程中的一些重要概念和问题,并提供实际的代码示例和解决方案。一、Java并发编程的基本概念线程与进程的区别并发和并行的概念共享资源与竞态条件线程安全性与数据同步二、Java......