fileno()获取fmemopen()打开的内存流文件的文件描述符时失败
管理猿 2019-06-11 10:33:59 大神们可知为何以下linux程序代码中fileno()获取fpout的文件描述符时返回-1错误吗?打印fd总是-1,fpout是fmemopen()打开的内存流文件指针,莫非fileno()就是不能获取fmemopen()内存流式文件的文件描述符?
#include <fcntl.h>
#include <unistd.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
int main() {
int fd;
int err_no;
FILE *fpout;
char buffer[256];
char buf[2048];
char *buf1;
char *cmd = "cat /proc/meminfo";
buf1 = "This is testing for fputs...\n";
int i = 0;
for(i=0; i < 29; i++){
buf[i] = buf1[i];
}
printf("cmd is: %s\n", cmd);
fpout = fmemopen(buf, 2048, "a+");
fd = fileno(fpout);
printf("fpout pointer value is: %d\n", fpout);
err_no = fprintf(fpout, "This is testing for fputs...\n");
printf("fprintf return value is: %d\n", err_no);
fseek(fpout, 0, SEEK_SET);
fgets(buffer, 255, fpout);
printf("get string is: %s\n", buffer );
memset(buffer, 0, 256);
printf("fd no. is: %d\n", fd);
printf("stdout no. is: %d\n", fileno(stdout));
dup2(fd,1);
printf("after dup2, fd no. is: %d\n", fd);
printf("after dup2, stdout no. is: %d\n", fileno(stdout));
system(cmd);
while (fgets(buffer, sizeof(buffer), fpout)) {
printf("%s", buffer);
}
fclose(fpout);
return 0;
}