我必须使用示例代码,其中必须提供文件源名称和目标文件名称。然后,这些名称将被发送到另一个函数,如下面的代码所示
int def(FILE *source, FILE *dest, int level)
{
----
-----
return Z_OK;
}
int main(int argc, char **argv)
{
int ret;
/* avoid end-of-line conversions */
SET_BINARY_MODE(stdin);
SET_BINARY_MODE(stdout);
// do compression if no arguments
if (argc == 1)
{
ret = def(stdin, stdout, Z_DEFAULT_COMPRESSION);
if (ret != Z_OK)
{
zerr(ret);
return ret;
}
// otherwise, report usage
else
{
fputs("zpipe usage: zpipe [-d] < source > dest\n", stderr);
return 1;
}
}
return 0;
}
我不了解,stdin和stdout如何传递输入和输出文件名。此外,我无法提供正确的源文件名和目标文件名顺序作为命令参数。大多数时候,我得到
zpipe usage: zpipe [-d] < source > dest
。更新:完整的示例代码位于this link
最佳答案
使用stdin
和stdout
时,不传递文件名。调用main
时,这些文件已经打开,程序可以读取/写入它们。然后,父进程(通常是外壳程序)负责将数据馈送到stdin
并使用程序中stdout
的数据进行处理。
在您的示例用法zpipe < sourcefile > destinationfile
中,外壳程序打开源文件进行读取,将打开的文件提供给zpipe,还创建目标文件进行写入,然后将程序输出到其stdout
的内容写入其中。 zpipe程序不会获取任何文件的名称,而只会获取打开的文件句柄。
同样,< sourcefile
和> destinationfile
也不是zpipe的参数。 Shell如上所述解析和处理它们,zpipe不会将它们用作参数。