我必须使用示例代码,我必须提供文件源名称和目标文件名。然后这些名称将被发送到另一个函数,如下面的代码所示
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
答案 0 :(得分:0)
使用stdin
和stdout
时,不会传递文件名。调用main
时这些文件已经打开,程序只能读/写它们。然后,父进程(通常是shell)负责将数据提供给stdin
并使用来自程序stdout
的数据执行某些操作。
在您的示例用法zpipe < sourcefile > destinationfile
中,shell打开 sourcefile 进行读取,并将打开的文件提供给 zpipe ,并创建 destinationfile < / em>用于写入,并在程序输出到stdout
时向其写入。 zpipe 程序没有得到任何一个文件的名称,它只是获取打开的文件句柄。
此外,< sourcefile
和> destinationfile
不是 zpipe 的参数。 Shell如上所述解析并处理它们, zpipe 不会将它们作为参数。