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

热点内容
编程珠玑笔记 浏览:274
结束命令行 浏览:268
力学原理pdf 浏览:729
宏定义编译后不变 浏览:397
如何搞免费服务器 浏览:206
神经系统pdf 浏览:665
如何查看服务器上的数据库服务器 浏览:188
压缩机型号v代表什么 浏览:51
旅游类源码 浏览:862
电脑服务器类型怎么设置 浏览:228
pdf炒股 浏览:786
服务器地址缺少端口号什么意思 浏览:530
下载需要解压的小说用哪个软件 浏览:534
广东分布式服务器云主机 浏览:583
服务器忙打不开怎么办 浏览:15
tif压缩软件 浏览:413
程序员那么可爱陆漓上班第1天 浏览:952
macbookair自带什么app 浏览:701
如何关了加密的软件 浏览:581
程序员p2p待遇 浏览:922