2011-03-10 54 views
0

請大家幫忙,我有以下小小的snip代碼來測試fsteam,但它總是失敗,而且我的代碼後面跟着strace文件。 它在unix中工作,但不在linux中。 感謝您的幫助。我的fstream總是失敗


#include <fstream.h> 
#include <iostream.h> 

using namespace std; 

int main() { 

     fstream filestr; 

     filestr.open ("test.txt",ios::out | ios::in | ios::app); 
     if(filestr.bad()) 
     {   
       cout << "Bad input." << endl; 
     }   
     if(filestr.fail()) 
     {   
       cout << "Open failed." << endl; 
     }  
     filestr << " dsgesvsvds"; 

     filestr.close(); 

     return 0; 
} 

execve("./a.out", ["./a.out"], [/* 83 vars */]) = 0 
brk(0)         = 0x10754000 
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2b8cf1e9d000 
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2b8cf1e9e000 
access("/etc/ld.so.preload", R_OK)  = -1 ENOENT (No such file or directory) 
open("tls/x86_64/libstdc++.so.6", O_RDONLY) = -1 ENOENT (No such file or directory) 
open("tls/libstdc++.so.6", O_RDONLY) = -1 ENOENT (No such file or directory) 
open("x86_64/libstdc++.so.6", O_RDONLY) = -1 ENOENT (No such file or directory) 
open("libstdc++.so.6", O_RDONLY)  = -1 ENOENT (No such file or directory) 
open("/products/oracle/11.2.0/client/lib/tls/x86_64/libstdc++.so.6", O_RDONLY) = -1 ENOENT (No such file or directory) 
stat("/products/oracle/11.2.0/client/lib/tls/x86_64", 0x7fffd262c040) = -1 ENOENT (No such file or directory) 
open("/products/oracle/11.2.0/client/lib/tls/libstdc++.so.6", O_RDONLY) = -1 ENOENT (No such file or directory) 
stat("/products/oracle/11.2.0/client/lib/tls", 0x7fffd262c040) = -1 ENOENT (No such file or directory) 
open("/products/oracle/11.2.0/client/lib/x86_64/libstdc++.so.6", O_RDONLY) = -1 ENOENT (No such file or directory) 
stat("/products/oracle/11.2.0/client/lib/x86_64", 0x7fffd262c040) = -1 ENOENT (No such file or directory) 
open("/products/oracle/11.2.0/client/lib/libstdc++.so.6", O_RDONLY) = -1 ENOENT (No such file or directory) 
stat("/products/oracle/11.2.0/client/lib", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0 
open("/roscodev/rosco/bin/tls/x86_64/libstdc++.so.6", O_RDONLY) = -1 ENOENT (No such file or directory) 
stat("/roscodev/rosco/bin/tls/x86_64", 0x7fffd262c040) = -1 ENOENT (No such file or directory) 
open("/roscodev/rosco/bin/tls/libstdc++.so.6", O_RDONLY) = -1 ENOENT (No such file or directory) 
stat("/roscodev/rosco/bin/tls", 0x7fffd262c040) = -1 ENOENT (No such file or directory) 
open("/roscodev/rosco/bin/x86_64/libstdc++.so.6", O_RDONLY) = -1 ENOENT (No such file or directory) 
stat("/roscodev/rosco/bin/x86_64", 0x7fffd262c040) = -1 ENOENT (No such file or directory) 
open("/roscodev/rosco/bin/libstdc++.so.6", O_RDONLY) = -1 ENOENT (No such file or directory) 
stat("/roscodev/rosco/bin", {st_mode=S_IFDIR|0775, st_size=12288, ...}) = 0 
open("/etc/ld.so.cache", O_RDONLY)  = 3 
fstat(3, {st_mode=S_IFREG|0644, st_size=80518, ...}) = 0 
mmap(NULL, 80518, PROT_READ, MAP_PRIVATE, 3, 0) = 0x2b8cf1e9f000 
close(3)        = 0 
open("/usr/lib64/libstdc++.so.6", O_RDONLY) = 3 
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0000\364\304\3528\0\0\0"..., 832) = 832 
fstat(3, {st_mode=S_IFREG|0755, st_size=976312, ...}) = 0 
mmap(0x38eac00000, 3145600, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x38eac00000 
mprotect(0x38eace6000, 2093056, PROT_NONE) = 0 
mmap(0x38eaee5000, 36864, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0xe5000) = 0x38eaee5000 
mmap(0x38eaeee000, 73600, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x38eaeee000 
close(3)        = 0 
open("tls/x86_64/libm.so.6", O_RDONLY) = -1 ENOENT (No such file or directory) 
open("tls/libm.so.6", O_RDONLY)   = -1 ENOENT (No such file or directory) 
open("x86_64/libm.so.6", O_RDONLY)  = -1 ENOENT (No such file or directory) 
open("libm.so.6", O_RDONLY)    = -1 ENOENT (No such file or directory) 
open("/products/oracle/11.2.0/client/lib/libm.so.6", O_RDONLY) = -1 ENOENT (No such file or directory) 
open("/roscodev/rosco/bin/libm.so.6", O_RDONLY) = -1 ENOENT (No such file or directory) 
open("/lib64/libm.so.6", O_RDONLY)  = 3 
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0`>\200\3438\0\0\0"..., 832) = 832 
fstat(3, {st_mode=S_IFREG|0755, st_size=615136, ...}) = 0 
mmap(0x38e3800000, 2629848, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x38e3800000 
mprotect(0x38e3882000, 2093056, PROT_NONE) = 0 
mmap(0x38e3a81000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x81000) = 0x38e3a81000 
close(3)        = 0 
open("tls/x86_64/libgcc_s.so.1", O_RDONLY) = -1 ENOENT (No such file or directory) 
open("tls/libgcc_s.so.1", O_RDONLY)  = -1 ENOENT (No such file or directory) 
open("x86_64/libgcc_s.so.1", O_RDONLY) = -1 ENOENT (No such file or directory) 
open("libgcc_s.so.1", O_RDONLY)   = -1 ENOENT (No such file or directory) 
open("/products/oracle/11.2.0/client/lib/libgcc_s.so.1", O_RDONLY) = -1 ENOENT (No such file or directory) 
open("/roscodev/rosco/bin/libgcc_s.so.1", O_RDONLY) = -1 ENOENT (No such file or directory) 
open("/lib64/libgcc_s.so.1", O_RDONLY) = 3 
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0P\36\200\3468\0\0\0"..., 832) = 832 
fstat(3, {st_mode=S_IFREG|0755, st_size=58400, ...}) = 0 
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2b8cf1eb3000 
mmap(0x38e6800000, 2151784, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x38e6800000 
mprotect(0x38e680d000, 2097152, PROT_NONE) = 0 
mmap(0x38e6a0d000, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0xd000) = 0x38e6a0d000 
close(3)        = 0 
open("tls/x86_64/libc.so.6", O_RDONLY) = -1 ENOENT (No such file or directory) 
open("tls/libc.so.6", O_RDONLY)   = -1 ENOENT (No such file or directory) 
open("x86_64/libc.so.6", O_RDONLY)  = -1 ENOENT (No such file or directory) 
open("libc.so.6", O_RDONLY)    = -1 ENOENT (No such file or directory) 
open("/products/oracle/11.2.0/client/lib/libc.so.6", O_RDONLY) = -1 ENOENT (No such file or directory) 
open("/roscodev/rosco/bin/libc.so.6", O_RDONLY) = -1 ENOENT (No such file or directory) 
open("/lib64/libc.so.6", O_RDONLY)  = 3 
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\220\332\1\3438\0\0\0"..., 832) = 832 
fstat(3, {st_mode=S_IFREG|0755, st_size=1722304, ...}) = 0 
mmap(0x38e3000000, 3502424, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x38e3000000 
mprotect(0x38e314e000, 2097152, PROT_NONE) = 0 
mmap(0x38e334e000, 20480, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x14e000) = 0x38e334e000 
mmap(0x38e3353000, 16728, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x38e3353000 
close(3)        = 0 
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2b8cf1eb4000 
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2b8cf1eb5000 
arch_prctl(ARCH_SET_FS, 0x2b8cf1eb4bf0) = 0 
mprotect(0x38e334e000, 16384, PROT_READ) = 0 
mprotect(0x38e3a81000, 4096, PROT_READ) = 0 
mprotect(0x38eaee5000, 24576, PROT_READ) = 0 
mprotect(0x38e2e1b000, 4096, PROT_READ) = 0 
munmap(0x2b8cf1e9f000, 80518)   = 0 
fstat(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 0), ...}) = 0 
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2b8cf1e9f000 
write(1, "Open failed.\n", 13Open failed. 
)   = 13 
exit_group(0)       = ? 

回答

1
#include <fstream.h> 
#include <iostream.h> 

應該

#include <fstream> 
#include <iostream> 
+0

我明白了:ios :: in和ios :: out一起引發了這個問題,所以我把ios :: in帶出來,它變成了 filestr.open(「test.txt」,ios :: out | ios :: app); 然後它工作正常。但爲什麼?????? – user630675 2011-03-12 01:00:42

+0

哦。也許是因爲'fstream'已經用於輸入和輸出了。 'ifstream'僅用於輸入,'ofstream'僅用於輸出。你應該嘗試設置'ios :: out'和'ios :: in' – fouronnes 2011-03-12 11:47:17

1

您正在使用C++,和標準的頭沒有.h擴展類似於C的因此,您需要#include<fstream><iostream>。如果我糾正你的#include錯誤( - 無.H應該#include <fstream>#include <iostream>

0

你的代碼工作得很好,我的Ubuntu 9.10下。但我懷疑這不是你的問題,因爲這會導致編譯錯誤。可能你有權限錯誤?如果我創建test.txt並刪除寫入權限,則會顯示「打開失敗」。信息。

+0

謝謝你。我在redhat linux下試用了沒有.h的版本,對我也失敗了。我還嘗試過在運行之前先觸摸一個文件,沒有運氣。希望有人能給我一些見解。 – user630675 2011-03-11 00:05:01

0

我在修正頭文件後,在Windows8.1上的DevC++中運行它,它工作正常。