导航:首页 > 操作系统 > 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相关的资料

热点内容
算法模板集 浏览:590
java程序员修炼之道pdf 浏览:996
做解压学习用品手工 浏览:85
手机文件夹删除又出现怎么解决 浏览:285
php时间段分析 浏览:213
redisjava类 浏览:911
剪力墙错开部分钢筋是否加密 浏览:477
linux字符设备驱动程序 浏览:57
全排列算法java 浏览:465
中国银行app转账电子回单在哪里 浏览:51
操作简单的程序员 浏览:600
数值积分算法求pi 浏览:18
按钮怎么连命令方块 浏览:909
房贷还清后不解压能贷款吗 浏览:36
程序员哄老婆开心技术 浏览:672
oracle自动备份压缩文件 浏览:855
遵义人字形加密网带 浏览:255
宁波人社在哪里下载app 浏览:92
好哒商户app下载在哪里下载 浏览:609
广发兑星巴克是在app哪里操作 浏览:785