Portál AbcLinuxu, 15. července 2025 12:14


Dotaz: ako citat zo socketu, alebo /proc/mem

6.7.2007 13:42 macrek | skóre: 12
ako citat zo socketu, alebo /proc/mem
Přečteno: 433×
Odpovědět | Admin
Existuje nejaky sposob (najlepsie v bashi, alebo aj C) ako citat vsetko co prechadza cez urcity socket ?

Napadlo ma jednoduche
cat /proc/PID/fd/cislo_fd_zodpovedajuce_socketu
ale to funguje len s fd ktore su fyzicky na disku.

Zaujmalo by ma tiez, ci a ako je mozne precitat subor /proc/PID/mem

Za nakopnutie diki.
An eye for an eye makes the whole world blind.
Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

Zdeněk Molík avatar 9.8.2007 16:38 Zdeněk Molík | skóre: 14 | Znojmo - Oblekovice
Rozbalit Rozbalit vše Re: ako citat zo socketu, alebo /proc/mem
Odpovědět | | Sbalit | Link | Blokovat | Admin
Začal bych studiem /usr/src/linux/Documentation/filesystems/proc.txt

/proc není obyčejný filesystém. Dopoučuji si trochu přečíst jak to celé vlastně funguje a pak mrkněte na /proc Filesystem as a Programmers' Tool

No a pokud se vám stačí to C tak bych to udělal takto nějak
oroborus avatar 9.8.2007 17:19 oroborus | skóre: 20 | blog: Bulanci
Rozbalit Rozbalit vše Re: ako citat zo socketu, alebo /proc/mem
Odpovědět | | Sbalit | Link | Blokovat | Admin
/proc/PID/mem je virtualny subor,ktory obsahuje obraz virtualnej pamäte daneho procesu, virtualna pamät sa neadresuje od 0X0, ale od 0X08048000. Pri otvoreni suboru je offset nastaveny na 0X0 a kedze tam nic nie je (nic ako _nic_ (nenamapovane ziadne fyzicke pamätove ramce) nie ako 0 [same nuly]) dojde pri citani z tochoto subortu k chybe.

Ak z neho chceme citat musime si nastavit offset na miesto kde urcite nieco je :)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

#define STR_SIZE 256

char data[STR_SIZE];

int main(int argc,char **argv)
{
	char file[STR_SIZE];
	char str[STR_SIZE];
	int fd;

	sprintf(file,"/proc/%d/mem",getpid());

	fd = open(file,O_RDONLY);

	strcpy(data,"Hello world!\n");
	lseek(fd,(int)&data,SEEK_SET);
	read(fd,str,STR_SIZE);
	printf("str=%s\n",str);

	strcpy(data,"Ahoj svet!");
	lseek(fd,(int)&data,SEEK_SET);
	read(fd,str,STR_SIZE);
	printf("str=%s",str);

	close(fd);

	return 0;
}

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.