Re: Show application performance/errors from pseudo file
Daniel Hilst Selli <[email protected]> Thu, 23 Oct 2014 17:09:03 -0200
| Newsgroups | org.kernel.vger.linux-c-programming |
|---|---|
| Message-ID | <[email protected]> |
On 10/17/2014 04:00 PM, Daniel Hilst Selli wrote: > On 10/17/2014 03:59 PM, Daniel Hilst Selli wrote: >> On 10/16/2014 05:31 PM, Yichao Yu wrote: >>> Resend as plain text. >>> >>> On Thu, Oct 16, 2014 at 4:01 PM, Yichao Yu <[email protected]> wrote: >>>> >>>> >>>> On Thu, Oct 16, 2014 at 3:50 PM, Daniel Hilst Selli <[email protected]> >>>> wrote: >>>>> >>>>> I'm writing a new application and would be nice to have a pseudo file >>>>> showing its status, just the way that procfs does with kernel. >>>>> I'm looking for sugestions, I want to `cat' files contents and have >>>>> something similar to /proc/meminfo >>>>> >>>>> First I think using named pipes, but, AFAIK, pipes would retain data >>>>> writed until someone read it, what I thought is a kind of read >>>>> hook that only show data when asked for. Here are a few requisites, >>>>> >>>>> - Don't retain data >>>>> - Don't generate disk I/O >>>>> - Vanish when application stops >>>>> - Work with a simple cat or something similar.. >>>> >>>> >>>> You should have a look at fuse[1]. >>>> >>>> [1] http://fuse.sourceforge.net/ >>>> >>>>> >>>>> >>>>> With that in mind I think about using unix domain sockets.. it seems to >>>>> fit all requisites, for >>>>> the fourth requisite I could use netcat, that is almost cat, >>>>> >>>>> Cheers >>>>> -- >>>>> To unsubscribe from this list: send the line "unsubscribe >>>>> linux-c-programming" in >>>>> the body of a message to [email protected] >>>>> More majordomo info at http://vger.kernel.org/majordomo-info.html >>>> >>>> >> >> Seems god, a little overkill for so simple stuff but adds nice features, I'm taking >> a look on further options.. >> >> Cheers > good* Looking further I found that named pipes will block on open() calls, until the other end open it too. So I still can implement this with named pipes. Here is the pseudo code implementation I use. (Yes I'm using threads) void *stats_handler(void *unused) { for (;;) { int fd = open(FIFO_PATH, O_WRONLY); /* should block here */ /* handle open error */ write(fd, statistics_buffer, statistics_buffer_len); close(fd); sleep(1); /* avoid flooders :-P */ } } void stats_init(void) { pthread_t stat_id; mkfifo(FIFO_PATH, 0755); /* handle mkfifo errors */ pthread_create(&stat_id, NULL, stats_handler, NULL); } int main(void) { ... stats_init(); ... } After that I can just `cat FIFO_PATH' to see my statistics :D Thanks for all and best regards!