00001
00002
00003
00004
00005
00006
00007
00008
00009 #include <iostream>
00010 #include <string.h>
00011 #include <stdlib.h>
00012 #include <unistd.h>
00013 #include <sys/types.h>
00014 #include <sys/stat.h>
00015
00016 #include <sys/ipc.h>
00017 #include <sys/shm.h>
00018
00019
00020 #include <sys/types.h>
00021 #include <sys/wait.h>
00022
00023
00024
00025 #include <fcntl.h>
00026
00027 #include <sys/time.h>
00028
00029
00030
00031
00032
00033 #include "SysPlusPlus/syscall.h"
00034
00035
00036
00037 int syspp::Call::Open ( const char *pn, int flags, mode_t mode ) {
00038
00039 return open ( pn, flags, mode );
00040
00041 }
00042
00043
00044
00045 int syspp::Call::Open ( const char *pn, int flags ) {
00046
00047 return open ( pn, flags );
00048
00049 }
00050
00051
00052
00053 int syspp::Call::Close ( int fd ) {
00054
00055 return close ( fd );
00056
00057 }
00058
00059
00060
00061 int syspp::Call::Shutdown ( int fd, int hown ) {
00062
00063 return close ( fd );
00064
00065 }
00066
00067
00068
00069 int syspp::Call::Write ( int fd, void *buf, int count ) {
00070 int ret ;
00071
00072 do {
00073 errno = 0;
00074 ret = write ( fd, buf, count ) ;
00075 } while ( ret == -1 && errno == EINTR );
00076
00077 return ret;
00078 }
00079
00080
00081
00082 int syspp::Call::Read ( int fd, void *buf, int count ) {
00083 int ret;
00084
00085 do {
00086 errno = 0;
00087 ret = read ( fd, buf, count ) ;
00088 } while ( ret == -1 && errno == EINTR );
00089 return ret;
00090
00091 }
00092
00093
00094
00095 int syspp::Call::Listen ( int fd, int backlog ) {
00096 int ret;
00097
00098 do {
00099 errno = 0;
00100 ret = listen ( fd, backlog ) ;
00101 } while ( ret == -1 && errno == EINTR );
00102 return ret;
00103
00104 }
00105
00106
00107 int syspp::Call::Select ( int n, fd_set *rdset, fd_set *wset, fd_set *except_set , struct timeval *tv ) {
00108 int ret;
00109
00110 do {
00111 errno = 0;
00112 ret = select ( n, rdset, wset, except_set, tv );
00113 } while ( ret == -1 && errno == EINTR );
00114 return ret;
00115
00116 }
00117
00118
00119
00120 int syspp::Call::Fcntl ( int fd, int cmd ) {
00121 int ret;
00122
00123 do {
00124 errno = 0;
00125 ret = fcntl (fd, cmd);
00126 } while ( ret == -1 && errno == EINTR );
00127 return ret;
00128
00129 }
00130
00131
00132 int syspp::Call::Fcntl ( int fd, int cmd, long arg ) {
00133 int ret;
00134
00135 do {
00136 errno = 0;
00137 ret = fcntl (fd, cmd, arg);
00138 } while ( ret == -1 && errno == EINTR );
00139 return ret;
00140
00141 }
00142
00143
00144 int syspp::Call::Fcntl ( int fd, int cmd, struct flock *lock ) {
00145
00146 int ret;
00147
00148 do {
00149 errno = 0;
00150 ret = fcntl (fd, cmd, lock);
00151 } while ( ret == -1 && errno == EINTR );
00152 return ret;
00153 }
00154
00155
00156
00157 int syspp::Call::Setsockopt (int fd, int level, int optname, void *optval, int optlen ) {
00158 int ret=0;
00159
00160 do {
00161 errno = 0;
00162 ret = setsockopt ( fd, level, optname, optval, optlen ) ;
00163
00164 } while ( ret == -1 && errno == EINTR );
00165
00166 return ret;
00167 }
00168
00169
00170
00171 int syspp::Call::Getpid ( ) {
00172
00173 return getpid () ;
00174 }
00175
00176
00177
00178 int syspp::Call::Accept ( int fd, struct sockaddr *addr, int *addrlen ) {
00179
00180 int ret=0;
00181
00182 do {
00183 errno = 0;
00184
00185 ret = accept ( fd, addr, (socklen_t*) addrlen );
00186
00187
00188
00189 } while ( ret == -1 && errno == EINTR );
00190
00191 return ret;
00192 }
00193
00194
00195
00196
00197 int syspp::Call::Sem_init ( sem_t * sem, int pshared, unsigned value ) {
00198
00199 int ret=0;
00200
00201 do {
00202 errno = 0;
00203 ret = sem_init (sem, pshared, value );
00204 } while ( ret == -1 && errno == EINTR );
00205
00206 return ret;
00207
00208
00209 }
00210
00211
00212
00213
00214 int syspp::Call::Sem_destroy ( sem_t *sem ) {
00215
00216 int ret=0;
00217
00218 do {
00219 errno = 0;
00220 ret = sem_destroy (sem );
00221 } while ( ret == -1 && errno == EINTR );
00222
00223 return ret;
00224
00225 }
00226
00227
00228
00229
00230 int syspp::Call::Sem_post ( sem_t *sem ){
00231
00232 int ret=0;
00233
00234 do {
00235 errno = 0;
00236 ret = sem_post (sem );
00237 } while ( ret == -1 && errno == EINTR );
00238
00239 return ret;
00240
00241 }
00242
00243
00244
00245
00246 int syspp::Call::Sem_wait ( sem_t *sem ){
00247
00248 int ret=0;
00249
00250 do {
00251 errno = 0;
00252 ret = sem_wait (sem );
00253 } while ( ret == -1 && errno == EINTR );
00254
00255 return ret;
00256
00257 }
00258
00259
00260
00261
00262 int syspp::Call::Sem_trywait ( sem_t *sem ){
00263
00264 int ret=0;
00265
00266 do {
00267 errno = 0;
00268 ret = sem_trywait (sem );
00269 } while ( ret == -1 && errno == EINTR );
00270
00271 return ret;
00272
00273
00274 }
00275
00276
00277
00278
00279 int syspp::Call::Unlink ( const char *fn ){
00280
00281 int ret=0;
00282
00283 do {
00284 errno = 0;
00285 ret = unlink (fn );
00286 } while ( ret == -1 && errno == EINTR );
00287
00288 return ret;
00289 }
00290
00291
00292
00293
00294 int syspp::Call::Pthread_mutex_init( pthread_mutex_t * mutex, const pthread_mutexattr_t * attr) {
00295
00296 int ret=0;
00297
00298 do {
00299 errno = 0;
00300 ret = pthread_mutex_init( (pthread_mutex_t * ) mutex, (const pthread_mutexattr_t *) attr);
00301 } while ( ret == -1 && errno == EINTR );
00302
00303 return ret;
00304
00305
00306 }
00307
00308
00309
00310
00311 int syspp::Call::Pthread_mutex_destroy( pthread_mutex_t * mutex) {
00312
00313 int ret=0;
00314
00315 do {
00316 errno = 0;
00317 ret = pthread_mutex_destroy( mutex);
00318 } while ( ret == -1 && errno == EINTR );
00319
00320 return ret;
00321
00322 }
00323
00324
00325
00326
00327 int syspp::Call::Pthread_mutex_lock( pthread_mutex_t * mutex) {
00328
00329 int ret=0;
00330
00331 do {
00332 errno = 0;
00333 ret = pthread_mutex_lock( mutex);
00334 } while ( ret == -1 && errno == EINTR );
00335
00336 return ret;
00337
00338
00339 }
00340
00341
00342
00343
00344 int syspp::Call::Pthread_mutex_trylock( pthread_mutex_t * mutex) {
00345
00346 int ret=0;
00347
00348 do {
00349 errno = 0;
00350 ret = pthread_mutex_trylock( mutex);
00351 } while ( ret == -1 && errno == EINTR );
00352
00353 return ret;
00354
00355
00356 }
00357
00358
00359
00360
00361 int syspp::Call::Pthread_mutex_unlock( pthread_mutex_t * mutex) {
00362
00363 int ret=0;
00364
00365 do {
00366 errno = 0;
00367 ret = pthread_mutex_unlock( mutex);
00368 } while ( ret == -1 && errno == EINTR );
00369
00370 return ret;
00371
00372
00373 }
00374
00375
00376
00377 int syspp::Call::Lseek ( int fd, off_t offset, int whence ) {
00378
00379 int ret=0;
00380
00381 do {
00382 errno = 0;
00383 ret = lseek ( fd, offset, whence );
00384 } while ( ret == -1 && errno == EINTR );
00385
00386 return ret;
00387
00388
00389 }
00390
00391
00392 int syspp::Call::Gettimeofday( struct timeval *t, struct timezone *tz ) {
00393
00394 return gettimeofday(t, NULL ) ;
00395
00396
00397 }
00398
00399
00400
00401
00402 void * syspp::Call::Malloc ( size_t size ) {
00403
00404 void * ret ;
00405 ret = malloc ( size );
00406 if ( ret == NULL ) {
00407 std::cout << "PANIC: OUT OF Memory(Malloc)\n";
00408 exit(0);
00409 }
00410 return ret;
00411
00412 }
00413
00414
00415 void * syspp::Call::Realloc ( void *ptr, size_t size ) {
00416
00417 void * ret = realloc ( ptr, size );
00418 if ( ret == NULL ) {
00419 std::cout << "PANIC: OUT OF Memory(Realloc)\n";
00420 abort();
00421 }
00422 return ret;
00423 }
00424
00425
00426 pid_t syspp::Call::Fork(void) {
00427
00428 pid_t p = fork ();
00429 if ( p == -1 ) {
00430 std::cout << "PANIC! Cannot start new process (fork).\n";
00431 abort();
00432 }
00433 return p;
00434
00435 }
00436
00437
00438 int syspp::Call::Chdir(const char *dir ) {
00439
00440 return chdir ( dir );
00441
00442 }
00443
00444
00445
00446 int syspp::Call::Kill( pid_t p, int sig ){
00447
00448 return kill ( p, sig );
00449
00450 }
00451
00452
00453
00454 int syspp::Call::Connect(int sockfd, const struct sockaddr *serv_addr, int addrlen){
00455 int ret ;
00456
00457 do {
00458 errno = 0;
00459 ret = connect( sockfd, serv_addr, addrlen);
00460 } while ( ret == -1 && errno == EINTR );
00461
00462 return ret;
00463 }
00464
00465
00466
00467 int syspp::Call::Getsockopt(int s, int level, int optname, void *optval, int *optlen){
00468
00469
00470
00471 return getsockopt( s, level, optname, optval,(socklen_t*) optlen);
00472 }
00473
00474
00475
00476 int syspp::Call::Setsockopt(int s, int level, int optname, const void *optval, int optlen){
00477
00478 return setsockopt( s, level, optname, optval, (socklen_t) optlen);
00479
00480 }
00481
00482
00483
00484 ssize_t syspp::Call::Send(int s, const void *buf, size_t len, int flags){
00485
00486 int ret ;
00487
00488 do {
00489 errno = 0;
00490 ret = send ( s, buf, len, flags );
00491 } while ( ret == -1 && errno == EINTR );
00492
00493 return ret;
00494
00495 }
00496
00497 ssize_t syspp::Call::Sendto(int s, const void *buf, size_t len, int flags, const struct sockaddr *to, int tolen){
00498
00499 int ret ;
00500
00501 do {
00502 errno = 0;
00503 ret = sendto(s, buf, len, flags, to, tolen);
00504
00505 } while ( ret == -1 && errno == EINTR );
00506
00507 return ret;
00508
00509 }
00510
00511 ssize_t syspp::Call::Sendmsg(int s, const struct msghdr *msg, int flags){
00512 int ret ;
00513
00514 do {
00515 errno = 0;
00516 ret = sendmsg ( s, msg, flags );
00517 } while ( ret == -1 && errno == EINTR );
00518
00519 return ret;
00520
00521 }
00522
00523
00524
00525 ssize_t syspp::Call::Recv(int s, void *buf, size_t len, int flags){
00526
00527 int ret ;
00528
00529 do {
00530 errno = 0;
00531 ret = recv ( s, buf, len, flags );
00532 } while ( ret == -1 && errno == EINTR );
00533
00534 return ret;
00535
00536 }
00537
00538
00539 ssize_t syspp::Call::Recvfrom(int s, void *buf, size_t len, int flags, struct sockaddr *from, int *fromlen){
00540
00541 int ret ;
00542
00543 do {
00544 errno = 0;
00545 ret = recvfrom ( s, buf, len, flags, from, (socklen_t*)fromlen );
00546 } while ( ret == -1 && errno == EINTR );
00547
00548 return ret;
00549 }
00550
00551
00552 ssize_t syspp::Call::Recvmsg(int s, struct msghdr *msg, int flags){
00553
00554 int ret ;
00555
00556 do {
00557 errno = 0;
00558 ret = recvmsg ( s, msg, flags );
00559 } while ( ret == -1 && errno == EINTR );
00560
00561 return ret;
00562
00563 }
00564
00565
00566
00567 int syspp::Call::Socket(int domain, int type, int protocol){
00568 return socket(domain, type, protocol);
00569 }
00570
00571
00572
00573 int syspp::Call::Bind(int sockfd, struct sockaddr *my_addr, int addrlen){
00574
00575 return bind ( sockfd, my_addr, addrlen);
00576
00577 }
00578
00579
00580
00581
00582 int syspp::Call::Pthread_create(pthread_t * thread, pthread_attr_t * attr, void * (*start_routine)(void *), void * arg){
00583
00584 return pthread_create( thread, attr, start_routine, arg);
00585
00586 }
00587
00588 int syspp::Call::Pthread_join(pthread_t th, void **thread_return){
00589
00590 return pthread_join( th, thread_return);
00591
00592 }
00593
00594 int syspp::Call::Pthread_kill(pthread_t thread, int signo){
00595
00596 return pthread_kill( thread, signo);
00597
00598 }
00599
00600 int syspp::Call::Pthread_detach(pthread_t th){
00601
00602 return pthread_detach( th);
00603
00604 }
00605
00606 int syspp::Call::ShmGet(int key, int size, int flgs ){
00607
00608 return shmget( key, size, flgs);
00609
00610
00611 }
00612
00613 void * syspp::Call::ShmAt(int shmid, const void *shmaddr, int shmflg) {
00614
00615 return shmat( shmid, shmaddr, shmflg);
00616
00617 }
00618
00619
00620 int syspp::Call::ShmDt(const void *shmaddr) {
00621
00622 return shmdt( shmaddr );
00623
00624
00625 }
00626
00627
00628
00629 int syspp::Call::ShmCtl( int ShmMemId, int cmd, void * dst) {
00630
00631 struct shmid_ds buffer;
00632 int ret;
00633 ret = shmctl( ShmMemId, cmd , &buffer) ;
00634
00635 if ( ret == -1 )
00636 return -1;
00637
00638 if ( dst != NULL ) {
00639 memcpy ( dst, (void*) &buffer, sizeof( buffer ));
00640 }
00641 return ret;
00642
00643 }
00644
00645
00646 void syspp::Call::Sleep( int s) {
00647 struct timeval tv;
00648
00649 tv.tv_sec = s;
00650 tv.tv_usec = 0;
00651
00652 select ( 0,NULL, NULL, NULL, &tv );
00653
00654 }
00655
00656
00657
00658 void syspp::Call::Usleep( int s) {
00659
00660 struct timeval tv;
00661
00662 tv.tv_sec = s/1000000;
00663 tv.tv_usec = s%1000000;
00664
00665 select ( 0,NULL, NULL, NULL, &tv );
00666
00667 }
00668
00669
00670 int syspp::Call::Waitpid( int pid, int * status, int i ) {
00671
00672 int ret =0;
00673 do {
00674 errno = 0;
00675 ret = waitpid( pid, status, i );
00676 } while ( ret == -1 && errno == EINTR );
00677
00678 return ret;
00679
00680 }
00681
00682
00683
00684
00685 int syspp::Call::Chmod(const char *path, const mode_t mode) {
00686
00687 return chmod( path, mode);
00688
00689 }
00690
00691
00692
00693 int syspp::Call::FChmod(const int fd, const mode_t mode) {
00694
00695 return fchmod( fd, mode);
00696
00697 }
00698
00699
00700
00701
00702
00703