我想确定popen()函数调用重新启动的流大小。我尝试使用fseek和ftell,但它返回的大小为-1。任何人都可以建议我如何确定文件大小?以下是我正在使用的代码....
char return_val[256];
FILE *fp = NULL;
char line[256];
memset (return_val, 0, 256);
/* set the defalut value */
strncpy (return_val, "N/A", 4);
char cmd[] = "if [ -f /etc/version ]; then cut -d, -f1 -s /etc/version ; fi";
/* Open the command for reading. */
fp = popen(cmd, "r");
if (fp != NULL)
{
/* read the line from file */
fgets (line, 256, fp);
if( line != NULL)
{
/* copy the data */
strncpy(return_val, line, strnlen (line, 256));
}
/* close the file */
pclose (fp);
}
答案 0 :(得分:6)
你做不到。 popen为您提供了一个管道,一个先进先出的FIFO流。角色一边进入,一边是另一边。它是管道的本质,你事先不知道将传输多少字节。
您可以使用带内信令,有多少字节,或者您实施缓冲和动态分配。
在管道上也不可能寻求,因为它只是这些进程之间的一种“门户”。你知道,比如游戏“Portal”/“Portal2”。