View Full Version : programacao C em linux


vorenus
13-11-2007, 02:35
Boas, estou com um problema, tenho que guardar num ficheiro o resultado de /proc/cpuinfo mas com um # no inicio de cada linha...

fazendo isso pela linha de comandos é com o codigo:

cat /proc/cpuinfo | awk '{print "#" $0}'

mas com o execlp da conflito com as aspas e plicas... pois deveria ficar

execlp("cat","cat","/proc/cpuinfo"," | ","awk ' {printf"#" $0}'",NULL);

alguem me sabe dizer como resolver este problema?

ou uma alternativa ?

Tyran
13-11-2007, 03:26
Já tentaste com a a função popen?
cumpzz

Consu
13-11-2007, 08:02
Se a memória não me falha, sempre que queres introduzir aspas dentro de aspas podes fazê-lo da seguinte forma:

execlp("cat","cat","/proc/cpuinfo"," | ","awk ' {printf\"#\" $0}'",NULL);


\" para " e para o \ tem de ser \\. Creio que em C é assim que se faz.

r3pek
13-11-2007, 09:36
Boas, estou com um problema, tenho que guardar num ficheiro o resultado de /proc/cpuinfo mas com um # no inicio de cada linha...

fazendo isso pela linha de comandos é com o codigo:

cat /proc/cpuinfo | awk '{print "#" $0}'
mas com o execlp da conflito com as aspas e plicas... pois deveria ficar

execlp("cat","cat","/proc/cpuinfo"," | ","awk ' {printf"#" $0}'",NULL);
alguem me sabe dizer como resolver este problema?

ou uma alternativa ?

mas k mania é esta agora de usar comandos do sistema para solucionar problemas? fogo isto é um programa da tanga que se faz com 1 printf e um fread. desculpa tar a dizer isto na tua thread mas já ando a ver bastantes threads que em vês de fazerem o código preferem usar o execlp ou parecidos. este tipo de código tem falhas de segurança e cria dependencias externas aos programas k estamos a criar. por acaso o awk e o cat até vêm em todas as distros, mas imagina k ey não kero o awk para nd, já o teu programa não funciona e isso não me parece muito bem.....

Mas pronto isto sou só eu.... :S

CoolMaster
13-11-2007, 10:46
Se o r3pek não tivesse dito o que disse, eu diria eu.. portanto subscrevo! Isso assim já nem programação é.

Bertes
13-11-2007, 15:41
... e que tal em vez de apenas criticarem o vorenus, darem-lhe uma mãozinha?



...

alguem me sabe dizer como resolver este problema?

ou uma alternativa ?

vorenus
13-11-2007, 18:21
mas k mania é esta agora de usar comandos do sistema para solucionar problemas? fogo isto é um programa da tanga que se faz com 1 printf e um fread. desculpa tar a dizer isto na tua thread mas já ando a ver bastantes threads que em vês de fazerem o código preferem usar o execlp ou parecidos. este tipo de código tem falhas de segurança e cria dependencias externas aos programas k estamos a criar. por acaso o awk e o cat até vêm em todas as distros, mas imagina k ey não kero o awk para nd, já o teu programa não funciona e isso não me parece muito bem.....

Mas pronto isto sou só eu.... :S

e explicar como fazes isso? ou tenho que adivinhar?


@para os que responderam: obrigado

slack_guy
13-11-2007, 19:29
e explicar como fazes isso? ou tenho que adivinhar?
- abrir /proc/cpuinfo
- ler
- fechar

onde está a dúvida? :-)

vorenus
13-11-2007, 19:31
- abrir /proc/cpuinfo
- ler
- fechar

onde está a dúvida? :-)

a duvida esta que para fazer isso (pelo que me ensinaram) atraves de um programa é necessario usar o execlp....

r3pek
13-11-2007, 19:35
bem, só tou a responder desta maneira pk parece que há pessoal que não consegue pensar um bocadinha e ver como isto é básico... e muito mais facil do que andar a usar exec's.....

#include <stdio.h>

int main(void) {
FILE *fd = fopen("/proc/cpuinfo", "r");
char linha[512];

while (fgets(linha, 512, fd) != NULL)
printf("#%s", linha);

fclose(fd);
return 0;
}

papinha toda feita.

r3pek
13-11-2007, 19:36
a duvida esta que para fazer isso (pelo que me ensinaram) atraves de um programa é necessario usar o execlp....

alguém te desensiou MUITO mal....

vorenus
13-11-2007, 19:45
bem, só tou a responder desta maneira pk parece que há pessoal que não consegue pensar um bocadinha e ver como isto é básico... e muito mais facil do que andar a usar exec's.....

#include <stdio.h>

int main(void) {
FILE *fd = fopen("/proc/cpuinfo", "r");
char linha[512];

while (fgets(linha, 512, fd) != NULL)
printf("#%s", linha);

fclose(fd);
return 0;
}papinha toda feita.

obrigado por me dares a papinha toda...

e ja agora PARABENS por saberes tudo...

ninguem te obriga a ajudar.. se nao keres nao ajudes... mas escusas de ser arrogante....

desculpa seres tu a ouvir... mas ja nao é a primeira vez que vejo nas threads em que alguem pede ajuda e vao pra la uns chicos espertos.. armarem-se em herois a "gozar" com quem pediu ajuda!!!

r3pek
13-11-2007, 19:51
obrigado por me dares a papinha toda...

e ja agora PARABENS por saberes tudo...

ninguem te obriga a ajudar.. se nao keres nao ajudes... mas escusas de ser arrogante....

desculpa seres tu a ouvir... mas ja nao é a primeira vez que vejo nas threads em que alguem pede ajuda e vao pra la uns chicos espertos.. armarem-se em herois a "gozar" com quem pediu ajuda!!!

nao me tou a armar em heroi nem coisa nenhuma e se fores ver os meus outros posts ves que não costumo ser assim.
no meu primeiro post nesta thread dei-te logo duas dicas e se tu não sabias do que eu estava a falar, investigavas.
ninguem é obrigado a saber tudo, mas também ninguem obriga ninguem a ser preguiçoso.

slack_guy
13-11-2007, 20:11
a duvida esta que para fazer isso (pelo que me ensinaram) atraves de um programa é necessario usar o execlp....
Mas porquê através de um 'programa'? É o processo normalíssimo de abrir, ler e fechar um ficheiro. O meu erro, se calhar, foi pensar que sabias abrir ficheiros. Sorry.

vorenus
13-11-2007, 22:53
Mas porquê através de um 'programa'? É o processo normalíssimo de abrir, ler e fechar um ficheiro. O meu erro, se calhar, foi pensar que sabias abrir ficheiros. Sorry.

eu sei manipular ficheiros... o meu problema foi na consola tentei abrir o /proc/cpuinfo com o gedit ... e ele deu.me um ficheiro em branco...

logo pus de parte tentar manipular o ficheiro pra receber os dados e pressupus (e mal) que so daria pra abri-lo com o cat ...

slack_guy
14-11-2007, 00:22
http://www.linfo.org/proc_cpuinfo.html

$ man proc

"On a UNIX system, everything is a file; if something is not a file, it is a process." ;-)