setpgid

引数pid、引数pgidの両方にゼロを指定

#include < unistd.h >

#include < stdio.h >

int main()
{
    if (setpgid(0, 0) < 0){
        perror("setpgid");
        return 1;
    }
    return 0;
}

uid, euidの設定

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

#include < stdio.h >

static void
printuid()
{
    printf("uid = %d euid = %d\n",
           (int)getuid(),(int)geteuid());
}

int main() {
    uid_t uid, euid;
    
    uid = getuid();
    euid=geteuid();
    
    printuid();
    
    if(setuid(uid) < 0){
        perror("setuid");
        return 1;
    }
    printuid();
    
    if(setuid(euid) < 0){
        perror("setuid");
        return 1;
    }
    printuid();
    
    return 0;
}

getpid/getppid

自分または親のプロセスID

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

#include 

int
main()
{
    pid_t pid, ppid;
    
    pid = getpid();
    ppid = getppid();
    
    printf("pid = %d, ppid = %d\n", (int)pid, (int)ppid);
    return 0;
}

読出しサンプル

#include < stdio.h >
#include < math.h >
#include < fcnt1.h >
#include < math.h >
#include < sys/types.h >
#include < unistd.h >
#include < sys/mman.h >
typedef struct {
    char str[512];
    long lval;
    double dval;
}SSS;
#define NUMBER (10000)
void main()
{
    int fd;
    long psize,size;
    SSS *ptr;
    long i;
    if((fd=open("MapFile",O_RDWR))== -1){
        perror("open");
        exit(-1);
    }
#ifdef BSD
    psize=getpagesize();
#else
    psize=sysconf(_SC_PAGE_SIZE);
#endif
    size=(NUMBER*sizeof(SSS)/psize+1)*psize;
    /* map */
    ptr=(SSS *)mmap(0,size,PROT_READ|PROT_WRITE,MAP_SHARED,fd,0);
    /* test */
    while(1){
        for(i=0;i
	

可変引数の用途

#include < stdio.h >
#include < varargs.h >

int debug_print(va_alist)
va_dcl
{
    va_list args;
    char *fmt;
    char buf[256];
    
    va_start(args);
    fmt=va_arg(args,char *);
    vsprintf(buf,fmt,args);
    va_end(args);
    fprintf(stderr,"DEBUG[ %s \n",buf);
    return(0);
}

グローバルデータを使う方法

unsigned char Map[ 100 ][ 100 ];

void main()
{
    InitMap();
    LoadMapData();
    SaveMapData();
}

int InitMap()
{
    int x, y;
    
    for(y=0;y<100;y++){
        for(x=0;x<100;x++){
            Map[x][y]=(unsigned char)0;
        }
    }
    return(0);
}

int LoadMapData()
{
    int x,y;
    
    for(y=0;y<100;y++){
        for(x=0;x<100;x++){
            Map[x][y]=getc();
            if(feof(stdin)){
                return(-1);
            }
        }
    }
    return(0);
}

int SaveMapData()
{
    int x,y;
    
    for(y=0;y<100;y++){
        for(x=0;x<100;x++){
            putc(Map[x][y]);
        }
    }
    return(0);
}

関数の実装

#include < stdio.h >

short GetShort();

void main()
{
    short num;
    
    while(1){
        /* short standard input, insert to num */
        num=GetShort();
        /* display num binary */
        ShortBinPrint(num);
    }
}

short GetShort()
{
    char buf[80];
    short num;
    
    fgets(buf, sizeof(buf)-1,stdin);
    num=(short)atoi(buf);
    
    return(0);
}

int ShortBinPrint(num)
short num;
{
    char buf[20];
    
    ShortToBinString(num,buf);
    
    printf("%\n",buf);
    
    return(0);
}

int ShortToBingString(num,buf)
short num;
char *ptr;

ptr=buf;
for(i=15;i>=0;i--){
    *ptr=(char)(((num>>i)&0x01)+'0');
    ptr++;
}
*ptr='\0';

return 0;
}

thisポインタ

メンバ関数から同じクラスのほかのメンバを参照する際には、直接参照することができる。

#include < iostream >
#include < cstring >
using namespace std;

class inventory {
    char item[20];
    double cost;
    int on_hand;
public:
    
    inventory(char *i, double c, int o)
    {
        strcpy(item, i);
        cost = c;
        on_hand = o;
    }
    void show();
};

void inventory::show()
{
    cout << item;
    cout << ": $" << cost;
    cout << " stock: " << on_hand << "\n";
}

int main()
{
    inventory ob("rench", 4.95, 4);
    ob.show();
    return 0;
}