从APUE阅读,只是感到好奇:
每次用户登录 UNIX 系统和每次有人执行
ls -l命令时都会使用密码文件。
这更像是一个概念性问题。我需要一些说明。
今天我正在学习一些套接字编程的东西,并根据Beej 的网络编程指南编写了一个简单的聊天服务器和聊天客户端。(聊天服务器接收客户端消息并向所有其他客户端发送消息)
聊天客户端只是一个将stdin输入发送到服务器并从服务器打印套接字数据的程序。
后来我注意到指南说我可以telnet用来连接到服务器。我试过了,它奏效了。
我不熟悉 telnet,很长一段时间我都不知道它到底是什么。
所以现在我的经历让我感到困惑:
telnet 不就是一个简单的 TCP 发送/回显程序吗?是什么让成为协议的东西如此特别?我的愚蠢聊天客户端程序没有创建 [应用程序] 协议。
来自维基百科Communication_protocol:
在电信中,通信协议是一种规则系统, 它允许通信系统的两个或多个实体通过物理量的任何种类的变化来传输信息。
Telnet 创建了哪些规则?telnet host port,为原始输入/输出打开一个 TCP 流套接字?那不是规则。
我正在阅读APUE,中断系统调用一章让我感到困惑。
我想根据书中写下我的理解,请指正。
早期 UNIX 系统的一个特点是,如果进程在“慢”系统调用中被阻塞时捕获到信号,则系统调用将被中断。系统调用返回错误并
errno设置为EINTR。这是在假设发生信号并且进程捕获它之后完成的,很有可能发生了一些应该唤醒被阻塞的系统调用的事情。
所以说早期的UNIX 系统有一个特性:如果我的程序使用系统调用,它会被中断/停止,如果程序在任何时候捕捉到信号。(默认处理程序也算作捕获吗?)
例如,如果我有一个read系统调用,它读取 10GB 数据,当它正在读取时,我发送任何一个信号(例如kill -SIGUSR1 pid),然后read将失败并返回。
为了防止应用程序不得不处理中断的系统调用,4.2BSD 引入了某些中断系统调用的自动重启。被自动重新启动的系统调用
ioctl,read,readv,write,writev,wait,和waitpid。正如我们所提到的,这些功能中的前五个功能只有在它们在慢速设备上运行时才会被信号中断;wait并且waitpid在捕获到信号时总是被中断。由于这会导致一些应用程序出现问题,如果操作被中断,则不希望操作重新启动,4.3BSD 允许进程在每个信号的基础上禁用此功能。
所以在引入自动重启之前,我不得不自己处理中断的系统调用。我需要编写如下代码:
中断系统调用的问题在于我们现在必须显式地处理错误返回。典型的代码序列(假设读取操作并假设我们想要重新启动读取,即使它被中断)将是:
again:
if ((n = read(fd, buf, BUFFSIZE)) < 0) {
if (errno == EINTR)
goto again; /* just an interrupted system call */
/* handle other errors …Run Code Online (Sandbox Code Playgroud) 在我阅读了libc6-dev 和 libc6 之间的问题 diff 后,我启动了一个新的Ubuntu 20.04 LTSVPS 并检查了一些 Ubuntu 软件包中包含哪些文件。
我检查了libc6-dev(https://packages.ubuntu.com/focal/amd64/libc6-dev/filelist)和libc6(https://packages.ubuntu.com/focal/amd64/libc6/filelist)。
正如我们所看到的,libc6-dev这些共享库位于 下/usr/lib/x86_64-linux-gnu/,并且libc6共享库位于 下/lib/x86_64-linux-gnu/。
但让我好奇的是:
我也有( )libc.so.6 下的。并且不删除. 这是从哪里来的?/usr/lib/x86_64-linux-gnu/libc.so.6 -> libc-2.31.so*apt install remove libc6-devlibc.so.6libc.so.6
packge安装-rw-r--r-- 1 root root 298 Apr 7 09:24 libc.so的libc6-dev只有298字节,什么?为什么?
sudo apt list --installed输出: https: //pastebin.com/geDjY2z2
ll -h | grep libc输出: https: //pastebin.com/UHn5QVt1 …
我想看看pthread_mutex_trylock.
通过打字man pthread_mutex_trylock,我得到了No manual entry for pthread_mutex_trylock。
然后我看到一个帖子建议做sudo apt-get install manpages-posix manpages-posix-dev。
之后,我看到如下描述:
PTHREAD_MUTEX_LOCK(3POSIX) POSIX Programmer's Manual PTHREAD_MUTEX_LOCK(3POSIX)
PROLOG
This manual page is part of the POSIX Programmer's Manual. The Linux implementation of this interface may differ (consult the cor?
responding Linux manual page for details of Linux behavior), or the interface may not be implemented on Linux.
Run Code Online (Sandbox Code Playgroud)
这个POSIX Programmer's Manual和我平时看到的Linux Programmer's Manual有什么区别?
这句话是什么意思:
此接口的 Linux 实现可能不同(有关 Linux …
我看到一个老问题,显示ssh连接到服务器时,会显示十六进制指纹。
为什么现在以base64格式给出?有什么好处?
我知道MD5坏了,现在默认是sha256,但是对于指纹格式,base64 编码和十六进制字符串是/表示相同的事情。那么改变格式有什么好处呢?
从man ls:
With --color=auto,
ls emits color codes only when standard output is connected to a terminal.
Run Code Online (Sandbox Code Playgroud)
只是出于好奇。当标准输出未连接到终端时,如果我发出颜色会有什么影响?
因为发射颜色需要额外的计算,所以如果标准输出没有连接到终端,我们就不需要它并且可以节省一些计算?