2011-03-10 3 views
0

도와주세요, 나는 fsteam을 테스트하려면 다음과 같은 작은 저격 코드가 있지만, 그것은 항상 실패하고 내 strace 파일은 코드 다음에 다음과 같습니다. 유닉스에서는 작동하지만 리눅스에서는 작동하지 않습니다. 도움 주셔서 감사합니다.내 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> 

당신은 C++을 사용하는

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

나는 알아 냈다 : ios :: in과 ios :: out이 함께 문제를 일으켜서 ios :: out을 취했다. filestr.open ("test.txt", ios :: out | ios :: app); 다음 그것은 잘 작동합니다.하지만 왜? – user630675

+0

오. 왜냐하면'fstream'은 이미 입출력을위한 것이기 때문입니다. 'ifstream'은 입력 전용이고'ofstream'은 출력 전용입니다. 'ios :: out'도'ios :: in'도 설정하지 말아야합니다. – fouronnes

1

해야하고, 표준 헤더 C로에서 같은 .h 확장이없는 당신은 #include<fstream><iostream>이 필요합니다.

0

# include 오류를 수정하면 코드가 우분투 9.10에서 올바르게 작동합니다 (#include <fstream>#include <iostream> - 아니요 .h가 아님). 하지만 그 결과는 컴파일 오류가 발생하기 때문에 문제가 아닌 것으로 판단됩니다. 권한 오류가 발생했을 수 있습니까? test.txt을 작성하고 쓰기 권한을 제거하면 "Open failed"라는 메시지가 나타납니다. 메시지.

+0

감사합니다. 나는 레드햇 리눅스에서 .h없이 버전을 시험해 보았고 나에게도 실패했다. 나도 그것을 실행하기 전에 먼저 행운을 빌어 파일을 터치 해 보았습니다. 누군가가 나에게 통찰력을 줄 수 있기를 바랍니다. – user630675

0

헤더 파일을 수정 한 후 windows8.1에서 DevC++로 실행하면 정상적으로 작동합니다.

관련 문제