c - 打印txt文件的校验和而不打印文件路径

标签 c linux string parsing tokenize

我想在mac中使用C计算txt文件的校验和,因此我编写了一个简单的程序

#include <iostream>
#include <stdio.h>
using namespace std;

int main() {
    FILE *in;
    char buff[512];
    if(!(in = popen("shasum ritesh_file_test.txt", "r")))
    {
        return 1;
    }
    while(fgets(buff, sizeof(buff), in)!=NULL)
    {
        cout << buff;
    }

    printf ("checksum = %s",buff);
    pclose(in);
    return 0;

它打印txt文件的校验和,还打印文件的路径。作为

30b574b4ddbc681d9e5e6492ae82b32a7923e02e ritesh_file_test.txt

如何摆脱此路径并仅访问校验和值?

最佳答案

shasum的输出格式是形式

 <HASH> <Filename>

所以,哈希值和文件名之间用空格分隔。将哈希值与完整输出分开的一种可能方法是标记 buff打印前。

您可以使用 strtok() 并使用空格( )作为分隔符,仅取出校验和值。

也就是说,在C中,您不包括 #include <iostream> ,不要使用using namespace std;并且不要写cout 。此外,使用 C编译器编译C代码。

关于c - 打印txt文件的校验和而不打印文件路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30932790/

相关文章:

python - 比较随机和urandom

python - Python中的 "string"和 'string'有什么区别吗?

c - 反转字符串的 C 程序

c - 从 kdtree 中删除时出现重复节点

c - 我在这里做错了什么?

python - STR 函数不起作用

string - WM_COPYDATA SendMessage - 它可以发送大字符串吗?

c# - 在 C 中引发和处理事件

linux - 如何使用 pstack 命令获取最后 n 行堆栈?

linux - 如何找出设备节点 '/dev/video11' 的驱动程序