我想知道文件描述符和文件指针之间的区别.
此外,在什么情况下你会使用一个而不是另一个?
有没有办法将内存缓冲区创建为FILE*.在TiXml中它可以将xml打印到FILE*但我似乎无法将其打印到内存缓冲区.
它们之间有什么区别?它们是如何使用的?谁能指点我的例子?
具体来说,如何在两种情况下"写入"流,以及如何恢复和输出(即屏幕)已写入文本的文本?
另外,"屏幕"输出本身就是一个流吗?也许我不太了解溪流.我知道,这当然也可以保存到文件中.所有这些都会使用fprintf/ fscanf等吗?
可能重复:
从std :: fstream获取文件*
我正在研究Linux,文件描述符是这个操作系统的主要模型.
我想知道是否有任何库或任何方法从C++开始检索本机Linux文件描述符std::fstream.
我想过,boost::iostream因为有一个叫做的课,file_descriptor但我明白它的目的与我想要达到的目的不同.
你知道某种方法吗?
有人知道一个允许SQLite从中加载数据的包装器std::iostream吗?
更明确一点:
std::fstream dataStream("database.sqlite");
...
sqlite3_open(...something using dataStream...);
Run Code Online (Sandbox Code Playgroud)
我想使用流,因为它们的模块性:能够在仍然从网络下载文件时加载文件,即时解压缩数据等.
注册自己的VFS后,应该可以使用sqlite3_open_v2.经过一个小时的实现(记录错误的)函数,我的第一次尝试让我从SQLite得到一个奇怪的"内存不足"错误,我想我会问这里是否有人知道现有的实现,然后花几个小时调试我的.
我正在尝试使用 fstream 部分截断(或缩短)现有文件。我尝试过写一个 EOF 字符,但这似乎没有任何作用。
任何帮助,将不胜感激...
有没有办法访问用c ++打开的文件的文件描述符?所以......
#include <iostream>
#include <fstream>
using namespace std;
int main() {
ifstream inputFile( "file.txt",ios::in );
cout << inputFile.fileDesc << endl;//made up call
return 0;
}
Run Code Online (Sandbox Code Playgroud)
问题是,ifstreams是否存在类似fileDesc的东西?如果不是我该怎么做呢?
我可以使用在其他地方打开的吗
FILE* f = ...
Run Code Online (Sandbox Code Playgroud)
初始化某个std::ostream实例的东西?像这样(伪代码):
FILE *f = ...;
std::ostream os;
os./*bind_to_f*/( f ); // HOW?
os << "Hello world" << std::endl;
Run Code Online (Sandbox Code Playgroud) 我正在慢慢地用C++编写一个专门的Web服务器应用程序(使用C 洋葱http服务器库和用于JSON序列化的JSONCPP库,如果这很重要的话).对于带有GCC 4.6编译器的Linux系统(我不关心可移植性)非Linux系统,或4.5之前的GCC或3.0之前的Clang).
我决定保留用户"数据库"(很少有用户,可能只有一两个,所以性能不是一个问题,O(n)访问时间是可以接受的)JSON格式,可能是一个小的JSON数组对象喜欢
{ "_user" : "basile" ;
"_crypasswd" : "XYZABC123" ;
"_email" : "basile@starynkevitch.net" ;
"firstname" : "Basile" ;
"lastname" : "Starynkevitch" ;
"privileges" : "all" ;
}
Run Code Online (Sandbox Code Playgroud)
使用约定(àla .htpasswd),该_crypasswd字段是crypt(3)用户密码的"加密",由_user名称加密;
我想用Json对象描述用户的原因是我的应用程序可能在描述用户的这些Json对象中添加(而不是替换)一些JSON字段(例如privileges上面).我正在使用JsonCpp作为C++的Json解析库.这个库想要ifstream解析.
所以我正在阅读我的密码文件
extern char* iaca_passwd_path; // the path of the password file
std::ifstream jsinpass(iaca_passwd_path);
Json::Value jpassarr;
Json::Reader reader;
reader.parse(jsinpass,jpassarr,true);
jsinpass.close();
assert (jpassarr.isArray());
for (int ix=0; ix<nbu; ix++) {
const Json::Value&jcuruser= jpassarr[ix]; …Run Code Online (Sandbox Code Playgroud) 在我生命的大部分时间里,我一直在使用cstdio.现在我想转移到iostream.
假设我有一个名为"foo.cpp"的独立程序,如下所示:
int main(){ // foo.cpp
int x;
std::cin >> x;
std::cout << x + 5 << "\n";
}
Run Code Online (Sandbox Code Playgroud)
在另一个名为"bar.cpp"的程序中,我调用了foo可执行文件.在过去,如果我想将stdin和stdout重定向到一个文件,我会这样使用freopen:
int main(){ // bar.cpp, redirecting stdin and stdout
freopen("foo.in", "r", stdin); // Suppose "foo.in" contains a single integer "42"
freopen("foo.out", "w", stdout);
system("foo.exe"); // "foo.out" will contain "47"
}
Run Code Online (Sandbox Code Playgroud)
现在我想重定向std::cin并std::cout以stringstreams.像这样的东西:
int main(){ // bar.cpp, redirecting cin and cout
std::istringstream instr("62");
std::ostringstream outstr;
std::cin.rdbuf(instr.rdbuf());
std::cout.rdbuf(outstr.rdbuf());
system("foo.exe"); // outstr should contain "67" …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用rc4通过s3fs对文件实施加密.基本上我需要一个文件描述符,s3fs使用它来提取文件的名称,然后做这件事.那我怎么用c ++做呢?
我没有任何代码可以显示,因为我不知道如何启动它会看起来像:
void foo(int fd){
// something
string temp;
temp = // result of that somethingthing;
ifstream in;
in.open(temp,ios::binary | ios::in);
}
Run Code Online (Sandbox Code Playgroud)
这甚至可行吗?或者我只是注定要使用系统调用?