如何在C中使用系统调用创建一个Linux等效的"nl"命令?

Ric*_*ral -2 c linux system-calls

我有一个练习要做我需要用C编码的代码,相当于catnl的命令只使用系统调用.给我们的系统调用是open(),close(),read()和write().

我已经完成了"猫"等效,它似乎运行正常,现在我需要做"nl"一个,但我遇到麻烦,我将如何逐行编写.

我们的想法是使用尽可能少的系统调用.

我知道我需要在缓冲区找到'\n',我可以做一段时间循环缓冲区并找到'\n'位置(让我们称之为X)然后将X个字节写入stdout.

但循环遍历缓冲区中的所有字符搜索行的末尾对我来说感觉不对,但我不知道我怎么能这样做...

重要编辑:
我想你们中有些人错过了我的问题......我不需要解释如何做到这一点,这不是我的问题.我知道该怎么做(或者有一个非常好的主意,我还没有尝试过)."问题"是,它感觉不对遍历缓冲区,文件也好,都烧焦成炭,找到行的末尾(无论怎样).我不是说这不是答案,或者我不允许这样做,我只是在谈论我的想法.这似乎是一种奇怪的方式,这就是全部......但如果就是这样,那就是我的问题的答案.

我很欣赏每个人的帮助:)

ava*_*kar 6

你将不得不搜索缓冲区\n,没有办法解决它.不要担心性能,程序将花费大部分时间readwrite.

另外,请确保使缓冲区足够大.不要打电话,read(file,&c,1)因为它会非常慢.