标签: api

在 Unix 系统上,为什么我们必须显式地`open()` 和`close()` 文件才能`read()` 或`write()` 它们?

为什么在 Unix 文件系统设计中存在open()close()存在?

操作系统不能只检测第一次read()或被write()调用并做open()通常会做的事情吗?

filesystems api architecture files

51
推荐指数
6
解决办法
8734
查看次数

在 fork() 之后,子进程从哪里开始执行?

我正在尝试学习 UNIX 编程,但遇到了一个关于 fork() 的问题。我知道 fork() 创建了一个与当前正在运行的进程相同的进程,但是它从哪里开始呢?例如,如果我有代码

int main (int argc, char **argv)
{
    int retval;
    printf ("This is most definitely the parent process\n");
    fflush (stdout);
    retval = fork ();
    printf ("Which process printed this?\n");

    return (EXIT_SUCCESS);
}
Run Code Online (Sandbox Code Playgroud)

输出是:

这绝对是父进程
哪个进程打印了这个?
哪个过程打印了这个?

我认为这fork()会创建一个相同的过程,所以我最初认为在该程序中,该fork()调用将永远递归调用。我猜是fork()fork()通话后从头创建的新进程?

如果我添加以下代码,以区分父进程和子进程,

if (child_pid = fork ()) printf ("This is the parent, child pid is %d\n", child_pid);
else printf ("This is the child, pid is %d\n",getpid ());
Run Code Online (Sandbox Code Playgroud)

在 fork() 调用之后,子进程从哪里开始执行?

process c fork api

24
推荐指数
2
解决办法
3万
查看次数

Unix shell“stdin/stdout APIs”有多稳定?

grepping、awking、sedding 和管道是任何类 Unix 操作系统用户的日常例行程序,无论是在命令行上还是在 shell 脚本中(从现在开始统称为过滤器)。

从本质上讲,当使用“标准”Unix CLI 程序和 shell 内置程序(从现在开始统称为命令)时,过滤器需要在每个过滤器步骤中为 stdin、stdout 和 stderr 提供精确的预期格式才能正常工作。在下文中,我将某些命令的这种精确预期格式称为此命令的 API。

作为具有 Web 开发背景的人,我将这种数据收集和数据处理在技术上与Web 抓取进行了比较- 这种技术在数据呈现方式发生最细微的变化时非常不稳定。

我的问题现在与 Unix 命令 API 的稳定性有关。

  1. 类 Unix 操作系统中的命令是否遵守有关其输入和输出的正式标准化?
  2. 历史上是否曾发生过某些重要命令的更新导致使用旧版本的所述命令构建的某些过滤器的功能中断的情况?
  3. 随着时间的推移,Unix 命令是否已经成熟到绝对不可能改变某些过滤器可能会破坏的方式?
  4. 如果过滤器可能因更改命令 API 不时中断,作为开发人员,我如何保护我的过滤器免受此问题的影响?

command-line shell standard filter api

21
推荐指数
5
解决办法
1124
查看次数

为什么 *BSD 为网络接口使用驱动程序特定名称?这是否意味着限制?

我注意到根据网卡的品牌,接口名称有所不同(我想取决于驱动程序)。

  • 为什么 *BSD 为网络接口使用驱动程序特定名称?
  • 这是否意味着内核中没有描述“通用网络接口”的抽象层,因此每个驱动程序都将通过其自己的 API 在内部进行寻址?
  • (如何)它会影响链路聚合、流量整形、QoS ( ALTQ )、过滤等子系统?

确切地说,在 pfSense 下,我无法将 ALTQ 与链路聚合 (LAG) 虚拟接口一起使用。

由于缺乏适当的抽象层,这是 BSD 内部限制吗?

freebsd networking kernel api pfsense

13
推荐指数
2
解决办法
2071
查看次数

在什么类 UNIX 系统/文件系统上,stat() 返回的 st_blocks 字段不是一些 512 字节单位?

我总是假设/ ... 系统调用st_blocks返回的字段用于获取文件的磁盘使用情况以 512 字节为单位表示。stat()lstat()du

检查POSIX 规范,我现在看到 POSIX 对此没有做出保证。其自身功能的文档perlstat()也警告不要做出这种假设。

无论如何,正如 POSIX 所指示的,该块大小与st_blksize返回的字段无关stat(),因此必须在其他地方找到。

检查 GNUdu或 GNUfind源代码,我看到 HP/UX 使用 1024 字节单位的证据。GNUfind调整其-printf %b输出以始终提供多个 512 字节单位,这可能是我困惑的根源。

目前是否还有其他仍在使用的类 Unix 系统st_blocks不是以 512 字节为单位表示的?这可以依赖于文件系统吗(正如 POSIX 所建议的那样)?我想安装 HP/UX NFS 共享可以做到这一点。

stat api portability

9
推荐指数
1
解决办法
690
查看次数

/proc/net/tcp 是否有更快的信息接口?

给定一个 linux TCP 套接字的 inode(通过 获得/proc/<pid>/fd),有没有更快的方法来查找我可以从/proc/net/tcp这个套接字中获得的信息?

我编写了一个故障排除工具,它监视进程并打印有关 IO 操作的实时信息(strace-type 信息收集到更高级别的抽象中并以不那么原始的方式呈现),但是在负载很重的网络服务器上,我发现它需要时间查找套接字信息(例如外部地址/端口)是令人望而却步的,因为它的大小非常大/proc/net/tcp(我目前正在查看的服务器上大约有 2MB)。

我可以通过缓存来管理这个,但这必然会引入延迟,让我怀疑“API”的荒谬性,它需要读取和解析 2MB 的 ASCII 文本才能找到有关套接字的信息。

networking api tcp proc

8
推荐指数
1
解决办法
6154
查看次数

我可以从 Linux 读取和写入备用 HFS+ 文件分支或 NTFS 数据流吗?

可以在 Linux 下挂载 Apple HFS+ 和 Microsoft NTFS 文件系统。

两个文件系统都支持每个文件的多个内容流,尽管这并没有被广泛使用。

是否有(半)标准方法可以从 Linux 访问这些文件系统功能?如果是这样,两个文件系统之间的方法是统一的还是只有神秘的临时方法可用?(也许有ioctls 的东西?)

filesystems ntfs api

6
推荐指数
1
解决办法
1231
查看次数

Linux中“curl -k -i -X”是什么意思?

我已阅读 的手册页Curl,但我无法理解这些参数(k、i 和 X)的含义。我看到它在 REST API 调用中使用,但有人可以解释这三个参数的作用吗?文档中没有说清楚。

先感谢您。

linux command-line man api curl

5
推荐指数
1
解决办法
2万
查看次数

SIGCHLD 和 waitpid() 或 wait() 之间有什么关系?

waitpid()如果我是正确的,进程会通过调用或函数来等待其子进程终止或停止wait()

waitpid()SIGCHLD信号和or函数有什么关系wait()

  • waitpid()当进程调用或wait()函数时,进程会自行挂起直到子进程终止/停止(这与向其发送 SIGCHLD 信号之前相同)是否正确?

    pause()挂起当前进程,直到有任何信号发送给它。所以我想知道是否waitpid()类似,除了直到 SIGCHLD 发送给它?)

  • 当 SIGCHLD 被发送到已通过调用挂起的进程时waitpid(),执行 SIGCHLD 处理程序和从挂起中恢复之间的顺序是什么waitpid()
    (在以下计算机系统示例中:程序员的视角,SIGCHLD 处理程序调用waitpid()。)

谢谢。

void handler(int sig)
{
  int olderrno = errno;

  while (waitpid(-1, NULL, 0) > 0) {
    Sio_puts("Handler reaped child\n");
  }
  if (errno != ECHILD)
    Sio_error("waitpid error");
  Sleep(1);
  errno = olderrno;
}

int main()
{
  int i, n;
  char buf[MAXBUF];

  if (signal(SIGCHLD, handler1) == SIG_ERR)
    unix_error("signal error"); …
Run Code Online (Sandbox Code Playgroud)

linux signals system-calls api wait

5
推荐指数
2
解决办法
9845
查看次数

内核函数“get_fs()”中“fs”的缩写是什么?

Linux内核有两个函数:

get_ds()get_fs()

根据这篇文章,我知道dsdata segment.

但是,我猜不出“fs”是什么意思。

有什么解释吗?

linux kernel conventions api linux-kernel

3
推荐指数
1
解决办法
7869
查看次数