w*s 发帖数: 7227 | 1 【 以下文字转载自 Linux 讨论区 】
发信人: wds (净洗前尘,从头再来), 信区: Linux
标 题: is perror() non-buffered io in linux ?
发信站: BBS 未名空间站 (Wed Feb 13 20:34:15 2013, 美东)
how about fflush(NULL) after printf ? |
|
m*******l 发帖数: 12782 | 2 fflush (NULL) flushes all stdio output stream
perror non buffered as I remembered |
|
t****t 发帖数: 6806 | 3 perror writes to stderr. stderr is non-buffered by default, but you may chan
ge it. |
|
d**e 发帖数: 6098 | 4 how about this?
int p = 1;
int q = 1;
pid_t c = fork();
if(c == 0)
{
while(p > 0)
;
q--
}
else if (c > 0)
{
while(q > 0)
;
p--;
}
else
{
perror("fork error");
}
else
{
perror("fork error");
} |
|
xt 发帖数: 17532 | 5 我搞到了一个小程序:
#include
#include
#include
#include
#include
int main( int argc, char** argv)
{
char buf[80] = {0};
int myfile;
pid_t pid;
struct psinfo psi;
if ( argc<2 ){
printf("Usage: %s PID\n", argv[0]);
return 1;
}
pid=atoi(argv[1]);
sprintf( buf, "/proc/%d/psinfo", pid);
myfile = open( buf, O_RDONLY );
if (myfile < 0)
perror( "open" );
if ( read( myfile, & psi, sizeof(psi) ) < 0 )
perror( "read" );
close( myfile );
printf( "%s |
|
s****n 发帖数: 786 | 6 struct ifreq ifreq;
int sock;
if((sock=socket(AF_INET,SOCK_STREAM,0))<0)
{
perror("socket");
return -1;
}
strcpy(ifreq.ifr_name,"eth1"); //change your interface here
if(ioctl(sock,SIOCGIFHWADDR,&ifreq)<0) //get your network address here
{
perror("ioctl");
return -1;
} |
|
d**d 发帖数: 389 | 7 【 以下文字转载自 Programming 讨论区 】
发信人: dxxd (东邪西毒), 信区: Programming
标 题: 请教一个linux下的POSIX timer的问题。
发信站: BBS 未名空间站 (Fri May 13 17:06:15 2011, 美东)
我用linux下面的POSIX timer, timer_create(),timer_settime(),
为什么在调用了timer_settime()以后,立马就有一个time-out callback? 然后再每过
5秒后有一个time out?
难道不是我调用timer_settime()以后,timer开始计时, 等到5秒以后再出现第一
time out callback 吗?
非常感谢!
代码如下:
#include
#include
#include
#include
#include
void
handle (sigval_t v)
{
tim... 阅读全帖 |
|
d**d 发帖数: 389 | 8 我用linux下面的POSIX timer, timer_create(),timer_settime(),
为什么在调用了timer_settime()以后,立马就有一个time-out callback? 然后再每过
5秒后有一个time out?
难道不是我调用timer_settime()以后,timer开始计时, 等到5秒以后再出现第一
time out callback 吗?
非常感谢!
代码如下:
#include
#include
#include
#include
#include
void
handle (sigval_t v)
{
time_t t;
char p[32];
time (&t);
strftime(p,sizeof(p),"%T ",localtime(&t));
printf("%s thread 0x%x,val=%d,signal captured.... 阅读全帖 |
|
j*******e 发帖数: 674 | 9 下面code在Linux2.6,gcc下运行:
$ ./a.out
Floating point exception (core dumped)
问题:
1. 已经设了process signal mask, 40行产生的SIGFPE应该被屏蔽
2. 32行安装了signal handler, 40行产生的SIGFPE应该被capture
为什么运行结果是直接core dump?
如果注释掉 “z=x/y", 改用“raise(SIGFPE)", 运行结果就符合预期。
难道“z=x/y"在这里不是rasie SIGFPE 吗?
=============================
#include
#include
#include
void sig_handler(int signum)
{
printf("sig_handler() received signal %d\n", signum);
}
int main(int argc, char * argv[])
{
// setup signal... 阅读全帖 |
|
x******a 发帖数: 6336 | 10 I got thousands problems on the following piece of code "dumpfile.h" when I
compile under cygwin. it is ok under visual stduio... can anyone help?
Thanks!
#include
#include
#include //ostream_iterator
#include //cerr
#include //std::copy
template
void dump_to_file(const char* filename, const std::vector& v_d){
std::ofstream ofs(filename);
if(!ofs){
std::cerr<<"Unable to open the file to write!n";
return ;... 阅读全帖 |
|
K*********n 发帖数: 2852 | 11 我也写了一个C的:
Node *del(Node *tree, int n){
Node *tmpNode;
if (tree == NULL)
perror("Element not found.");
else if (tree -> val > n) // go left
tree -> left = del(tree -> left, n);
else if (tree -> val < n)
tree -> right = del(tree -> right, n);
else{ // found n
if (tree -> left && tree -> right){ // two children
tmpNode = findMin(tree -> right);
tree -> ... 阅读全帖 |
|
s********e 发帖数: 37 | 12 客户端的...免费提供...:)
//
// Client Program: socket_c.c
//
#include
#include
#include
#include
#include
#define SOCKET_PORT 6500
int get_socket_connection()
{
struct sockaddr_in sin;
struct hostent *hp;
int s;
hp = gethostbyname("192.168.0.132");
sin.sin_family = AF_INET;
sin.sin_addr.s_addr = ((struct in_addr *)(hp->h_addr))->s_addr;
sin.sin_port = htons(SOCKET_PORT);
if ((s = socket(AF_INET, SOCK_STREAM, 0)) == -1)
{ perror("socket"); e |
|
w*s 发帖数: 7227 | 13 how about fflush(NULL) after printf ? |
|
p**p 发帖数: 3386 | 14 在一个while循环里面用select来判断数据是否准备好,设置了5秒的timeout。
照理说如果没有设备准备好,select等待5秒后会出现timeout,然后返回0。但是在运
行中select不停的返回0,根本不等5秒。这是怎么回事啊?下面是代码:
n = select(max_fd,&input, NULL,NULL,&timeout);
if (n<0) {perror("select");exit(-1);}
if (n==0) {
printf("Read timeout\n");
}
else printf("Data is ready\n"); |
|
J*******3 发帖数: 1651 | 15 在用c写程序时,很多时候需要存储一些简单的数据,如果为此而用mysql数据库就有些
大才小用了,可以把这些数据以结构的形写入文件,然后再需要时读取文件,取出数据。
如下是定义函数的源文件和头文件:
源文件struct.c:
#include "struct.h"
//第一个参数是要写入的文件名,第二个参数是缓冲区,第三个参数是缓冲区大小,
第四个参数是打开文件流的形态,返回TRUE表示写入成功,返回FALSE表示写入失败
int writeStruct(const char *fileName,char *buffer,int bufferLen,char *mode){
int ret;
FILE *fileID = NULL;
fileID = fopen(fileName,mode);
if (fileID == NULL){
perror("fopen");
goto writeEnd;
}
rewind(fileID);
ret = fwrite(buffer,bufferLen,1,fi |
|
b******n 发帖数: 1629 | 16 一个服务器,一个客户端,客户端向服务器中同一个socket发起20个链接,然后服务器
端定时向这20个链接发数据。客户端用select来接收数据,但每次select都返回一,并
且只有最小的那个sockfd能拿到数据,如果在fd_set的时候把最小的去掉,那就是次小
的每次能拿到数据,后面的fd-isset都通不过,谁知道是怎么回事?
vector socklist;
for (int i = 0; i < connectioncount; ++i)
{
struct sockaddr_in bk_sender_addr;
int sockfd = socket(AF_INET, SOCK_STREAM, 0);
bk_sender_addr.sin_family = AF_INET;
bk_sender_addr.sin_port = htons(TCPBKPORT);
bk_sender_addr.sin_addr.s_addr = (inet_addr(senderip.c_str()));
if ... 阅读全帖 |
|
S*A 发帖数: 7142 | 17 我觉得大家讨论很热情,
我们来做点练习吧,不要光说不练。
下面这个程序是暴露一些写 C10M 可能碰到的问题,
看看大家有没有神魔解决方法。如果有,请贴程序或者
脚本,方便他人重复实验.
如果实在没有人贴答案,我也可以公布我自己的。
#include
#include
#include
#include
int main(int argc, char *argv[])
{
int i;
for (i = 0; i < 1024*1024*10; i++) {
int s;
s = socket(PF_INET, SOCK_STREAM, 0);
if (s < 0) {
char buffer[1024];
snprintf(buffer, sizeof buffer, "socket #%d", i);
perror(buffer);
... 阅读全帖 |
|
S*A 发帖数: 7142 | 18 这个练习1 已经发现了,C10M 没有强壮的内存支持是
没戏的。单单是 kernel 部分就已经消耗很多内存了。
所以我们把目标调整一下,1M per 4G RAM。
这样 64G 内存就有可能实现 10M。
练习2 就是看看,我们如果保留 1M/4G 的空TCP
连接,可不可以。完全不往 TCP 里面发东西。就是
建立连接而已。这样也不存在 epoll 问题。
和实验1一样,我会发些拍脑瓜想出来的简单代码。
你直接用这个代码冲刺 1M/4G 会碰到些实际问题。
有兴趣的同学跟着做一下实验,看看有没有办法解
决这些问题。
BTW,我是实验出了 1M/4G (服务器方),所以是
有可能的。建立1M 连接还花了不少时间。
服务器方代码。端口是80, 大家可以自己改。
include
#include
#include
#include
#include
#include
#include
#include 阅读全帖 |
|
S*A 发帖数: 7142 | 19 拍脑瓜的简单客户端。假设端口是 80, 启动指定服务器 IP 地址,
不用域名。当然会碰到一个 IP 地址只能发出去 65K 个连接的限制。
如何用 ip alias 使用多个 IP 地址解决这个问题留给大家自己改。
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
void die(char *reason)
{
perror(reason);
exit(1);
}
int main(int argc, char **argv)
{
int sockfd;
struct sockaddr_in... 阅读全帖 |
|
S*A 发帖数: 7142 | 20 这个练习1 已经发现了,C10M 没有强壮的内存支持是
没戏的。单单是 kernel 部分就已经消耗很多内存了。
所以我们把目标调整一下,1M per 4G RAM。
这样 64G 内存就有可能实现 10M。
练习2 就是看看,我们如果保留 1M/4G 的空TCP
连接,可不可以。完全不往 TCP 里面发东西。就是
建立连接而已。这样也不存在 epoll 问题。
和实验1一样,我会发些拍脑瓜想出来的简单代码。
你直接用这个代码冲刺 1M/4G 会碰到些实际问题。
有兴趣的同学跟着做一下实验,看看有没有办法解
决这些问题。
BTW,我是实验出了 1M/4G (服务器方),所以是
有可能的。建立1M 连接还花了不少时间。
服务器方代码。端口是80, 大家可以自己改。
include
#include
#include
#include
#include
#include
#include
#include 阅读全帖 |
|
S*A 发帖数: 7142 | 21 拍脑瓜的简单客户端。假设端口是 80, 启动指定服务器 IP 地址,
不用域名。当然会碰到一个 IP 地址只能发出去 65K 个连接的限制。
如何用 ip alias 使用多个 IP 地址解决这个问题留给大家自己改。
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
void die(char *reason)
{
perror(reason);
exit(1);
}
int main(int argc, char **argv)
{
int sockfd;
struct sockaddr_in... 阅读全帖 |
|
p******s 发帖数: 938 | 22 使用pthread_create()出错,以下是测试用的代码:
void *ServerThread(void *arg1)
{
printf("I'm the server\n");
}
int main()
{
pthread_t serverID;
pthread_mutex_init(&lock, NULL);
printf("Now creating the thread to serve..\n");
if(pthread_create(&serverID, NULL, ServerThread, NULL)!=0)
perror("Could not create the thread\n");
pthread_join(serverID, NULL);
exit(0);
}
运行结果:
Now creating the thread to serve..
Could not create the thread
请问是为何出错?//bow |
|
n***l 发帖数: 9 | 23 下面这段代码在Linux Red Hat上run得很好, 可是在FreeBSD上run
了
之后一点反应都没有。究竟是什么问题呢?谢谢了先。
isock = socket (AF_INET, SOCK_RAW, IPROTO_ICMP);
tsock = socket (AF_INET, SOCK_RAW, IPROTO_TCP);
usock = socket (AF_INET, SOCK_RAW, IPROTO_UDP);
if (isock < 0 || tsock < 0 || usock < 0) {
exit(0);
}
while (1) {
FD_ZERO (&rfds);
FD_SET (isock, &rfds);
FD_SET (usock, &rfds);
FD_SET (tsock, &rfds);
if (select (usock + 1, &rfds, NULL, NULL, NULL) < 1) {
perror("select");
continue;
}
|
|
n***l 发帖数: 9 | 24 我有下面简单的code
pid = fork();
if (pid == 0) {
printf("Child process running\n");
} else if (pid < 0) {
printf("Failed on fork()\n");
exit(0);
} else {
... ...
if (kill(pid, SIGKILL) < 0) {
perror("Failed on kill()");
}
while(1){ ... ... };
}
运行后发现kill失败了。比如Child process的PID是4726,
在命令行“ps 4726”,结果是空的。但是用“ps”可以看到
child process。在命令行用“kill -9 4726”,系统报
错:No such process。
谁知道这到底是怎么会事?Thanks. |
|
s*s 发帖数: 100 | 25 有意义的回答,包子一个. Many thanks
解决问题的回答: 包子n个
可能是什么样的bug导致如下的错误信息
程序出错,
p4_error: latest msg from perror: Invalid argument
p0_10958: p4_error: OOPS: semop lock failed: -1
Killed by signal 2.
p0_10958: (782.811527) net_send: could not write to fd=4, errno = 32
Killed by signal 2.
Killed by signal 2.
最后track 到这一句:
(rank 0 ): MPI_Recv( data_need_sent, 11 , MPI_INT, MPI_ANY_SOURCE, MPI_ANY_
TAG, MPI_COMM_WORLD, &status);
这个语句执行过多次,最后才崩溃.
发送在这儿:
(rank i( i != 0 ) ): MPI_Send ( data_need_sent, 11, MPI_INT, |
|
g****y 发帖数: 199 | 26 ☆─────────────────────────────────────☆
sss (sss) 于 (Tue Sep 4 15:08:41 2007) 提到:
有意义的回答,包子一个. Many thanks
解决问题的回答: 包子n个
可能是什么样的bug导致如下的错误信息
程序出错,
p4_error: latest msg from perror: Invalid argument
p0_10958: p4_error: OOPS: semop lock failed: -1
Killed by signal 2.
p0_10958: (782.811527) net_send: could not write to fd=4, errno = 32
Killed by signal 2.
Killed by signal 2.
最后track 到这一句:
(rank 0 ): MPI_Recv( data_need_sent, 11 , MPI_INT, MPI_ANY_SOURCE, MPI_ANY_
TAG, MPI_COMM_WORLD, &status |
|