sys/types.h> #include #include #include #define BUFSIZE PIPE_BUF void err_quit...\n"; pid_t pid; int len; // create a pipe if((pipe(fd)) < 0) err_quit("pipe...failed\n"); // create a son process pid = fork(); if(pid<0) err_quit("fork failed...\n"; pid_t pid; int len; // create pipe if((pipe(fd))<0) err_quit("pipe failed...\n"); // create the son process1 pid = fork(); if(pid < 0) err_quit("fork failed
= 0) err_quit("can't create thread 1: %s\n", strerror(err)); /*sleep(1);*/ err = pthread_create...= 0) err_quit("can't create thread 2: %s\n", strerror(err)); err = pthread_join(tid1, &tret...= 0) err_quit("can't join with thread 1: %s\n", strerror(err)); printf("thread 1 exit code...= 0) err_quit("can't join with thread 2: %s\n", strerror(err)); printf("thread 2 exit code
= 0) err_quit("can't create thread 1: %s\n", strerror(err)); /*sleep(1);*/ err = pthread_create...= 0) err_quit("can't create thread 2: %s\n", strerror(err)); err = pthread_join(tid1, &...= 0) err_quit("can't join with thread 1: %s\n", strerror(err)); printf("thread 1 exit code...= 0) err_quit("can't join with thread 2: %s\n", strerror(err)); printf("thread 2 exit code
. */ void err_quit(const char *fmt, ...) { va_list ap; va_start(ap, fmt); err_doit(...Get maximum number of file descriptors. */ if (getrlimit(RLIMIT_NOFILE, &rl) < 0) err_quit...* Become a session leader to lose controlling TTY. */ if ((pid = fork()) < 0) err_quit...can't ignore SIGHUP" ); if( ( pid = fork() ) < 0 ) //再次创建一个子进程,同样使父进程退出 err_quit...* we won't prevent file systems from being unmounted. */ if (chdir("/") < 0) err_quit
= 0) err_quit("db_store error for alpha"); if (db_store(db, "beta", "Data for beta", DB_INSERT...= 0) err_quit("db_store error for beta"); if (db_store(db, "gamma", "record3", DB_INSERT)...= 0) err_quit("db_store error for gamma"); db_close(db); exit(0); } 2 集中式或非集中式 (1)集中式
= i) err_quit ("parent: expected %d, got %d", i, counter); else...= i) err_quit ("child: expected %d, got %d", i, counter); else...= 'p') err_quit ("wait parent pipe but got incorrect data %c", c);...= 'c') err_quit ("wait child pipe but got incorrect data %c", c);
dirent *dirp; char fullpath[MAX_PATH] = {0}; if((dp = opendir(path)) == NULL) { //err_quit
= 2) err_quit("usage: tcpcli "); sockfd = Socket(AF_INET, SOCK_STREAM, 0); bzero(&servaddr
例如在unix网络编程的时候,我们检查socket、inet_pton、connect、read和fputs函数是否返回错误,当发生错误时,就调用我们自己的err_quit或err_sys函数输出一个出错消息并终止程序的运行
: 13 err_quit ("unrecongnized option: -%c", optopt); 14 } 15 } 16 17
= 2) err_quit("usage: a.out "); if (access(argv[1], R_OK) < 0) err_ret(...= 2) err_quit("usage: ftw "); ret = myftw(argv[1], myfunc); /
= 2) err_quit("usage: ftw "); ret = myftw(argv[1], myfunc); /* does it all...= 2) err_quit("usage: ftw "); ret = myftw(argv[1], myfunc); /* does it all
= 2) err_quit("usage:udpcli"); bzero(&servaddr,sizeof(servaddr)); servaddr.sin_family
.); 106 void err_quit(const char *, ...); 107 void err_exit(int, const char *,
Writen(sockfd, sendline, strlen(sendline)); if (Readline(sockfd, recvline, MAXLINE) == 0) { err_quit
\n"); if ((pid = fork()) < 0)//pthread_atfork在调用fork以后执行 err_quit("fork failed"); else
if (Readline(sockfd, recvline, MAXLINE) == 0) err_quit("str_cli: server terminated prematurely"); Fputs...if (Readline(sockfd, recvline, MAXLINE) == 0) err_quit("str_cli: server terminated prematurely"); 这个例子可以看出来我们的客户端程序有个问题...req.arg2); Writen(sockfd, &req, sizeof(req)); if (Readn(sockfd, &rsp, sizeof(rsp)) == 0) err_quit
client[i] = connfd; /* save descriptor */ break; } if (i == FD_SETSIZE) err_quit
= 2) err_quit("usage: ls directory_name"); if ((dp = opendir(argv[1])) == NULL)
= htons(13); /* daytime server */ if (inet_pton(AF_INET, argv[1], &servaddr.sin_addr) <= 0) err_quit
领取专属 10元无门槛券
手把手带您无忧上云