예를 들어, 메모리 내 타르에서 파일 내용을 읽는 방법을 설명했습니다. is_file_in_tar()
기능은 length
과는 tar
에 저장되어있는 경우 name
D 파일의 위치를 오링 start
를 반환
#include <stdio.h>
#include <fcntl.h>
#include <string.h>
#include <sys/mman.h>
struct tar {
char name[100]; char _unused[24];
char size[12]; char _padding[376];
} *tar;
int is_file_in_tar(struct tar *tar, char *name, char **start, int *length){
for(; tar->name[0]; tar+=1+(*length+511)/512){
sscanf(tar->size, "%o", length);
if(!strcmp(tar->name,name)){ *start = (char*)(tar+1); return 1; }
}
return 0;
}
int main(){
int fd=open("libtar-1.2.11.tar", O_RDONLY);
tar=mmap(NULL, 808960, PROT_READ, MAP_PRIVATE, fd, 0);
char *start; int length; char name[]="libtar-1.2.11/TODO";
if(is_file_in_tar(tar,name,&start,&length)) printf("%.*s",length,start);
}
쉬운 방법은 아마도 특별한 사용자 ID를 변경 임시 파일을 작성, 다시 그것을 읽고, 그것을 삭제 한 다음 일반 사용자로 다시 변경하는 것? – gnud
간단한 질문 : 태그에서 이것을 모두 말하기 때문에 제목에 "C 프로그래밍"이라고 말하면 어떨까요? –
gnud, 나는 모든 대상 컴퓨터에서 특별한 사용자를 만들 수 없다고 생각합니다. Campos,이 질문은 "c"와 "tar"로 태그되었습니다, 미안 해요, 제가 여기 초보자 인 것처럼, 나는 당신의 요점을 얻지 못합니다. 내가 틀렸다면 나는 바로 잡을 것이다. – solotim