lseekプログラム

#include < sys/types.h >
#include < unistd.h >

#include < sys/stat.h >
#include < fcntl.h >
#include < stdio.h >

int main()
{
    int fd;
    off_t offset;
    ssize_t n;
    char buf[4096];
    
    if((fd = open("file.txt", O_RDONLY)) < 0){
        perror("open");
        return 1;
    }
    
    if ((offset = lseek(fd, 10, SEEK_SET)) < 0){
        perror("lseek");
        return 1;
    }
    
    if ((n = read(fd, buf, sizeof buf)) < 0){
        perror("read");
        return 1;
    }
    write(1, buf, n);
    
    return 0;
}

write

#include < unistd.h >

#include < stdio.h >

int main()
{
    ssize_t n;
    
    if ((n = write(1, "Hello\n", 6)) < 0){
        perror("write");
        return 1;
    }
    return 0;
}

ファイルの読み込み・書き込み専用オープン

#include < sys/types.h >
#include < sys/stat.h >
#include < fcntl.h >

#include < stdio.h >

int main()
{
    int fd_r, fd_w;
    
    if ((fd_r = open("/etc/hosts", O_RDONLY)) < 0){
        perror("/etc/hosts");
        return 1;
    }
    
    if ((fd_w = open("file.txt", O_WRONLY|O_CREAT|O_TRUNC, 0666)) < 0){
        perror("file.txt");
        return 1;
    }
    return 0;
}

setrlimit

#include < sys/time.h >
#include < sys/resource.h >

#include < unistd.h >
#include < stdio.h >

int main()
{
    struct rlimit rlim;
    
    rlim.rlim_cur = 1;
    rlim.rlim_max = 2;
    if (setrlimit(RLIMIT_CPU, &rlim) < 0){
        perror("setrlimit");
        return 1;
    }
    
    for(;;){
        chdir(".");
    }
    return 0;
}

libsystem_kernel.dylib`chdir:
0x7fff8cd39b38 <+0>: movl $0x200000c, %eax
0x7fff8cd39b3d <+5>: movq %rcx, %r10
0x7fff8cd39b40 <+8>: syscall
-> 0x7fff8cd39b42 <+10>: jae 0x7fff8cd39b4c ; <+20>
0x7fff8cd39b44 <+12>: movq %rax, %rdi
0x7fff8cd39b47 <+15>: jmp 0x7fff8cd34c53 ; cerror_nocancel
0x7fff8cd39b4c <+20>: retq
0x7fff8cd39b4d <+21>: nop
0x7fff8cd39b4e <+22>: nop
0x7fff8cd39b4f <+23>: nop

getrlimit

cpu時間のリミットを取得

#include < sys/time.h >
#include < sys/resource.h >

#include 

int main(){
    struct rlimit rlim;
    
    if (getrlimit(RLIMIT_CPU, &rlim) < 0){
        perror("getrlimit");
        return 1;
    }
    
    if (rlim.rlim_cur == RLIM_INFINITY){
        printf("rlim_cur = unlimited\n");
    } else {
        printf("rlim_cur = %lld\n", (long long)rlim.rlim_cur);
    }
    
    if(rlim.rlim_max == RLIM_INFINITY){
        printf("rlim_max = unlimited\n");
    } else {
        printf("rlim_max = %lld\n", (long long)rlim.rlim_max);
    }
    return 0;
}

getrusage

#include < sys/time.h >
#include < sys/resource.h >

#include < unistd.h >
#include < stdio.h >

int main(){
    struct rusage usage;
    int i; j;
    
    j = 1;
    for (i = 1; i <= 1000000; i++){
        chdir(".");
        j *= i;
    }
    if (getrusage(RUSAGE_SELF, &usage) < 0){
        perror("getrusage");
        return 1;
    }
    
    printf(
    "user time =  %ld.%06ld\n"
           "system time = %ld.%06ld\n",
           usage.ru_utime.tv_sec, usage.ru_utime.tv_usec,
           usage.ru_stime.tv_sec, usage.ru_stime.tv_usec
           );
    return 0;
}

getgroups

#include < sys/types.h >
#include < unistd.h >
#include < grp.h >

#include 

int main(){
    gid_t list[3];
    
    list[0] = 3000;
    list[1] = 3001;
    list[2] = 3002;
    if (setgroups(3, list) < 0){
        perror("setgroups");
        return 1;
    }
    return 0;
}

getgroups

#include < sys/types.h >
#include < unistd.h >

#include < limits.h >
#include < stdio.h >

int main()
{
    int i;
    int groups;
    gid_t list[NGROUPS_MAX];
    
    if((groups = getgroups(NGROUPS_MAX, list))< 0){
        perror("getgroups");
        return 1;
    }
    
    for (i = 0; i < groups; i++){
        printf("%d", (int)list[i]);
    }
    putchar('\n');
    return 0;
}