下面一段代码void dir(int sck) {FILE *fcmd;char buffer[PIPE_BUF];int n;if ((fcmd = popen("ls -l", "r")) == 0) {perror("popen error");return;}while ((n = read(fileno(fcmd), buffer, PIPE_BUF)) > 0)write(sck, buffer, n);if (pclose(fcmd) != 0) {printf("Non-zero return value from \"ls -l\"");}是一个FTP服务端函数代码,上面通过popen,pclose函数返回值是否为0来判断什么?是否正确啊,还有,这个dir()函数实现什么功能啊,是不是目录的操作,具体什么作用
2 回答

扬帆大鱼
TA贡献1799条经验 获得超9个赞
这个函数的功能应该是读取当前目录下的内容的
popen可以启动一个新的进程,ls -l则是要启动进程得程序名和参数,ls -l当然即使列出目录的意思咯
"r"是代表调用进程可以通过返回的文件指针读取到新启动的进程的输出。也可以是"w",这样调用进程就可以通过向文件写内容而新启动的进程从标准输入读取。事实上这就是进程间的管道通信。
popen返回一个文件指针,返回空指针也就是0即出错咯。
下面的while循环,就是把返回的文件的内容读取到传入的sck文件描述符所指向的文件中,fileno是把文件指针转换为文件描述符
pclose函数就是关闭这个管道,它的返回值是新启动的这个程序的退出码,
一般来说程序都返回0代表正确嘛,非零当然就表示程序可能有问题,如果是pclose函数错误会返回-1

繁星淼淼
TA贡献1775条经验 获得超11个赞
是否为0其实应写成是否为NULL;
popen返回一个FILE *指针,指向命令的输出内容,这里是ls -l的输出。
当然指针为NULL(0)就错误啦~
参数sck是另外一个文件的描述符。该文件保存ls -l的输出内容
- 2 回答
- 0 关注
- 721 浏览
添加回答
举报
0/150
提交
取消