gpt4 book ai didi

linux - 开发文件如何工作?

转载 作者:IT王子 更新时间:2023-10-29 00:48:47 26 4
gpt4 key购买 nike

来自 linux 的人如何制作 /dev 文件。你可以写信给他们,他们会立即被删除。我可以想象一些不断读取一些开发文件的程序:

FILE *fp;
char buffer[255];
int result;
fp = fopen(fileName, "r");
if (!fp) {
printf("Open file error");
return;
}
while (1)
{

result = fscanf(fp, "%254c", buffer);
printf("%s", buffer);
memset(buffer, 0, 255);
fflush(stdout);
sleep(1);
}
fclose(fp);

但是如何删除里面的内容呢?关闭文件并以“w”模式再次打开它们并不是他们的做法,因为你可以这样做,即 cat >/dev/tty

最佳答案

什么是文件?文件是目录结构中的名称,表示对象。当你打开一个像 /home/joe/foo.txt 这样的文件时,操作系统会在内存中创建一个代表该文件的对象(或者找到一个现有的,如果文件已经打开),绑定(bind)一个它的描述符被返回,然后对该文件描述符的操作(如 readwrite)通过对象被定向到文件系统代码中,该代码操纵文件在磁盘。

设备条目也是目录结构中的名称。当你打开一些 /dev/foo 时,操作系统会创建一个代表该设备的内存对象,或者找到一个现有的对象(在这种情况下,如果设备不支持多个,可能会出错打开!)。如果成功,它将一个新的文件描述符绑定(bind)到设备对象并将该描述符返回给您的程序。该对象的配置方式使得描述符上的 readwrite 等操作被定向为调用设备 foo 的特定设备驱动程序>,并对应于使用该设备执行某种 I/O。

/dev/ 中的此类条目不是文件;它们的一个更好的名称是“设备节点”(mknod 命令的名称就是为了证明这一点)。只有当程序员和系统管理员非常宽松地谈论它们时,他们才称它们为“设备文件”。

当您执行 cat >/dev/tty 时,没有任何东西在“另一端”“删除”数据。好吧,不完全是。基本上,cat 是在描述符上调用 write,这会导致函数调用链最终在内核的 tty 子系统中的某处结束。数据被传递给 tty 驱动程序,该驱动程序会将数据发送到串行端口或套接字,或发送到在屏幕上绘制字符或其他任何内容的控制台设备。像 xterm 这样的虚拟终端使用一对设备:一个主从伪 tty。如果一个 tty 连接到一个伪 tty 设备,那么 cat >/dev/tty 写入会通过一种“长号”:它们在伪 tty 的主端冒泡,其中事实上,在一些接收字节的用户空间 C 程序中有一个 while (1) 循环,就像从管道中接收字节一样。该程序是 xterm(或其他);它删除数据并在其窗口中绘制字符,滚动窗口等。

关于linux - 开发文件如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19872435/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com