변수 environ
의 내용을 .txt 파일로 쓰려고합니다.open() 및 write() 함수를 C
int archivo = open(argv[1], "rw");
int i=0;
while(environ[i]!=NULL){
write(archivo, environ[i], 1024);
i++;
}
파일이 생성되었지만 내용이 추가되지 않았습니다. 아무도 이유를 아나요?
변수 environ
의 내용을 .txt 파일로 쓰려고합니다.open() 및 write() 함수를 C
int archivo = open(argv[1], "rw");
int i=0;
while(environ[i]!=NULL){
write(archivo, environ[i], 1024);
i++;
}
파일이 생성되었지만 내용이 추가되지 않았습니다. 아무도 이유를 아나요?
open
에 대한 올바른 인수를 얻으려면 man 2 open
을 참조하십시오. 그것은해야한다 :
size_t string_length = strlen(environ[i]);
size_t wrote = 0;
while (wrote < string_length) {
size_t bytes_wrote = write(archivo, environ[i] + wrote, string_length - wrote);
if (bytes_wrote >= 0)
wrote += bytes_wrote;
else {
perror("write");
abort();
}
}
: write(archivo, environ[i], strlen(environ[i]));
당신은 당신이 쓴 무엇을 실제로 버퍼를 왼쪽 있는지 확인해야합니다 : 당신이 실제로 가지고있는
이open(argv[1], O_WRONLY | O_CREAT | O_TRUNC);
에만 많은 광고 작성해야
write
은 제출 한 모든 내용을 보증하지 않습니다.
이상적으로 당신은 stdio
전화 fopen
및 fwrite
친화적 훨씬 더 프로그래머을 찾아야한다.
FILE * fp = fopen(argv[1], "w");
// loop i
if (!fwrite(environ[i], strlen(environ[i]), 1, fp)) {
perror("fwrite");
abort();
}
실제로'strlen (environ [i]) + 1'이되어서는 안됩니까? (또는 어떤 종류의 구분 기호로 각 글을 따라 가면됩니까?) –
@ElchononEdelson 이진 파일을 쓰지 않는 한 널 종결자를 쓰는 것이 좋습니다. 단락 문자는 나쁜 생각이 아닐 것입니다 :). 아직도 이것은 질문의 일부가 아니 었습니다. –
사실 그것은 질문의 일부가 아니지만 여전히 하나 또는 다른 것이 필요합니다. –
파일을 여는 데 플래그를 변경해야한다고 생각합니다. "rw"는 open()을위한 것이 아니라 fopen()을위한 것입니다. 내가 생각
open(argv[1], O_WRONLY);
가 열려
편집을 사용하여 파일에 쓰기 위해 필요한 최소한 : 내가 링크를 발견 http://pubs.opengroup.org/onlinepubs/009696899/functions/open.html
http://pubs.opengroup.org/onlinepubs/9699919799/functions/open.html –
흥미 롭습니다. 어떻게 든 Google은 나에게 구식 링크를 주었다. 감사. – Solidus
http://stackoverflow.com/questions/2229377/writing-an- 정수 - 투 - 파일과 – Tschallacka
당신은 '오픈 (const char * pathname, int flags)'과'fopen (const char * path, const char * mode)'을 혼동하고있다. – aland
네,하지만 그 문제는 i입니다. 쓰기 명령을 사용하여 그것을하고 싶습니다 –