导航:首页 > 操作系统 > linuxgetline

linuxgetline

发布时间:2025-01-12 10:55:11

linux shell md5sum 指令的诡异问题

初看你的代码,貌似没什么问题,琢磨了半天才发现原来和相同文件的个数有关。
当你的相同文件数目大于等于3时,就会出这个问题。只有两个文件相同时,则不会出。
比如你的
text,
text1,
text2
是相同的,第一次进入时
比较和处理text,
text1
没有问题。
第二次进入时,此时要比较
text1

text2,相当于要执行
"md5sum
text1"
|
getline;
sum1=$1;
print
$0
"md5sum
text2"
|
getline;
sum2=$1;
print
$0
但是由于
"md5sum
text1"
|
getline
这条管道语句已经在上次比较
text

text1
时执行过了,awk在第二次执行的时候就不会再创建管道执行同样的md5sum命令让getline读取,而是尝试从之前打开的管道中让getline读取内容,显然,此时已经没有内容可读了,因此此时getline
会失败
(如果你用
if
语句判断这条命令的返回值,会发现返回值不等于1
(应该是0,表示
end
of
file)。所以这条语句并不会更新
$0
$1
这些变量,所以后面你
print
$0
实际上打印的是
ls
-lS
得到的输入。
解决方法很简单,在每次
"md5sum
"name
|
getline
之后,用close命令,比如
"md5sum
"name1
|
getline;
sum1=$1;
close("md5sum
"name1)
print
$0
"md5sum
"name2
|
getline;
sum2=$1;
close("md5sum
"name2)
print
$0
这样就在每次getline之后,都关闭管道,从而确保下次总能重新创建管道及执行md5sum命令。

❷ linux环境 C语言 getline()函数问题

*n是*ptr指向的缓冲区的大小。如果读取的字节数超过*n, *n值会被修改,缓冲区会被realloc。具体见man getline

如果数据量小,可以预先申请一个比较大的缓冲区,这样getline无须重复申请内存,可以提高效率。

ssize_t size_t在/usr/include/sys/types.h
最终定义,要继续跟到深层头文件,如:
/usr/lib/gcc/i686-pc-linux-gnu/GCC_VERSION/include/stddef.h

阅读全文

与linuxgetline相关的资料

热点内容
程序员被激怒 浏览:889
winxp找不到服务器dns地址 浏览:840
以文本文件的格式保存考生文件夹 浏览:39
编译原理文法分为几类 浏览:568
JAVA基础学python要多久 浏览:72
java流量控制 浏览:934
java实现多重继承 浏览:705
票据通加密狗怎么在新系统上使用 浏览:793
航模加密狗连接电脑 浏览:471
好用的汇编语言编译器 浏览:861
自己编译安卓虚拟机 浏览:911
中国的古代算法 浏览:654
上层怎么看程序员 浏览:25
程序员便当排骨 浏览:853
如何禁用安卓全家桶 浏览:259
oa服务器异常怎么办 浏览:71
cmd编译utf8 浏览:278
怎么截取app接受的数据 浏览:278
nrf24l01pdf 浏览:299
php字符串转array 浏览:435