来自 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)一个它的描述符被返回,然后对该文件描述符的操作(如 read 和 write)通过对象被定向到文件系统代码中,该代码操纵文件在磁盘。
设备条目也是目录结构中的名称。当你打开一些 /dev/foo 时,操作系统会创建一个代表该设备的内存对象,或者找到一个现有的对象(在这种情况下,如果设备不支持多个,可能会出错打开!)。如果成功,它将一个新的文件描述符绑定(bind)到设备对象并将该描述符返回给您的程序。该对象的配置方式使得描述符上的 read 和 write 等操作被定向为调用设备 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/
我正在学习如何使用Nokogiri,根据这段代码我遇到了一些问题:require'rubygems'require'mechanize'post_agent=WWW::Mechanize.newpost_page=post_agent.get('http://www.vbulletin.org/forum/showthread.php?t=230708')puts"\nabsolutepathwithtbodygivesnil"putspost_page.parser.xpath('/html/body/div/div/div/div/div/table/tbody/tr/td/div
总的来说,我对ruby还比较陌生,我正在为我正在创建的对象编写一些rspec测试用例。许多测试用例都非常基础,我只是想确保正确填充和返回值。我想知道是否有办法使用循环结构来执行此操作。不必为我要测试的每个方法都设置一个assertEquals。例如:describeitem,"TestingtheItem"doit"willhaveanullvaluetostart"doitem=Item.new#HereIcoulddotheitem.name.shouldbe_nil#thenIcoulddoitem.category.shouldbe_nilendend但我想要一些方法来使用
我有一个Ruby程序,它使用rubyzip压缩XML文件的目录树。gem。我的问题是文件开始变得很重,我想提高压缩级别,因为压缩时间不是问题。我在rubyzipdocumentation中找不到一种为创建的ZIP文件指定压缩级别的方法。有人知道如何更改此设置吗?是否有另一个允许指定压缩级别的Ruby库? 最佳答案 这是我通过查看rubyzip内部创建的代码。level=Zlib::BEST_COMPRESSIONZip::ZipOutputStream.open(zip_file)do|zip|Dir.glob("**/*")d
我试图在一个项目中使用rake,如果我把所有东西都放到Rakefile中,它会很大并且很难读取/找到东西,所以我试着将每个命名空间放在lib/rake中它自己的文件中,我添加了这个到我的rake文件的顶部:Dir['#{File.dirname(__FILE__)}/lib/rake/*.rake'].map{|f|requiref}它加载文件没问题,但没有任务。我现在只有一个.rake文件作为测试,名为“servers.rake”,它看起来像这样:namespace:serverdotask:testdoputs"test"endend所以当我运行rakeserver:testid时
我的目标是转换表单输入,例如“100兆字节”或“1GB”,并将其转换为我可以存储在数据库中的文件大小(以千字节为单位)。目前,我有这个:defquota_convert@regex=/([0-9]+)(.*)s/@sizes=%w{kilobytemegabytegigabyte}m=self.quota.match(@regex)if@sizes.include?m[2]eval("self.quota=#{m[1]}.#{m[2]}")endend这有效,但前提是输入是倍数(“gigabytes”,而不是“gigabyte”)并且由于使用了eval看起来疯狂不安全。所以,功能正常,
关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。
我在从html页面生成PDF时遇到问题。我正在使用PDFkit。在安装它的过程中,我注意到我需要wkhtmltopdf。所以我也安装了它。我做了PDFkit的文档所说的一切......现在我在尝试加载PDF时遇到了这个错误。这里是错误:commandfailed:"/usr/local/bin/wkhtmltopdf""--margin-right""0.75in""--page-size""Letter""--margin-top""0.75in""--margin-bottom""0.75in""--encoding""UTF-8""--margin-left""0.75in""-
Rails2.3可以选择随时使用RouteSet#add_configuration_file添加更多路由。是否可以在Rails3项目中做同样的事情? 最佳答案 在config/application.rb中:config.paths.config.routes在Rails3.2(也可能是Rails3.1)中,使用:config.paths["config/routes"] 关于ruby-on-rails-Rails3中的多个路由文件,我们在StackOverflow上找到一个类似的问题
给定这段代码defcreate@upgrades=User.update_all(["role=?","upgraded"],:id=>params[:upgrade])redirect_toadmin_upgrades_path,:notice=>"Successfullyupgradeduser."end我如何在该操作中实际验证它们是否已保存或未重定向到适当的页面和消息? 最佳答案 在Rails3中,update_all不返回任何有意义的信息,除了已更新的记录数(这可能取决于您的DBMS是否返回该信息)。http://ar.ru
我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t