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

热点内容
android表格demo 浏览:264
安卓怎么让相册不显示网页 浏览:301
php文件系统源码 浏览:714
易信java 浏览:487
北仑二级压缩螺杆机 浏览:50
加密路线免费入口 浏览:745
计算器程序员是干嘛的 浏览:362
数控编程里fo是啥键 浏览:661
javacdataxml 浏览:950
本机tcp服务器地址 浏览:433
切换pdf 浏览:98
iturns下载的app在哪里 浏览:647
云起书院App在哪里 浏览:621
怎么对hex文件进行加密 浏览:292
pdf少年时 浏览:961
两个同名文件夹同步 浏览:637
拍照文件夹哪个好用 浏览:97
文件夹和书包 浏览:517
解压归档拿登记证 浏览:231
去体验解压房 浏览:619