8
24
2010
1

unix 2-1

 

if(lseek(STDIN_FILENO,0,SEEK_CUR)==-1)
    printf("can't seek");
else printf("seek ok");

off_t lseek(int fileds,off_t offset,int whence)

whence: SEEK_SET SEEK_CUR SEEK_END
某些设备lseek返回值为负值,所以测试的时候应该小心,不要测试是否小于0,测试是否为-1

 

Category: unix | Tags: lseek File
8
24
2010
0

unix 1-7

 

//============================================================================
// Name        : unix.cpp
// Author      : xiaoguozi
// Version     :
// Copyright   : Your copyright notice
// Description : read command from stdin to exec,Ansi-style
//============================================================================

#include "apue.h"
#include <dirent.h>
#include <iostream>
#include <sstream>
#include <vector>
#include <sys/wait.h>

using namespace std;
#define BUFSIZE 4096

static void sig_int(int){
	printf("interrupt\n");
}
int main(int argc,char *argv[]) {
	string cmd;
	pid_t	pid;
	int status;

	if(::signal(SIGINT,sig_int) == SIG_ERR)
		err_sys("signal error");
	while(getline(cin,cmd)){
		stringstream ios;
		ios<<cmd;
		string tmp;
		vector<string> vec;
		while(ios>>tmp){
			vec.push_back(tmp);
		}
		if(vec.size()>4){
			err_sys("arguments must less than 4");
			//continue;
		}
		if((pid=fork())<0){
			err_sys("fork error");
		}else if(pid==0){
			if(vec.size()==1)
				execlp(vec[0].c_str(),vec[0].c_str(),(char*)0);
			else if(vec.size()==2)
				::execlp(vec[0].c_str(),vec[0].c_str(),vec[1].c_str(),(char*)0);
			else if(vec.size()==3)
				::execlp(vec[0].c_str(),vec[0].c_str(),vec[1].c_str(),vec[2].c_str(),(char*)0);
			else if(vec.size()==4)
				::execlp(vec[0].c_str(),vec[0].c_str(),vec[1].c_str(),vec[2].c_str(),vec[3].c_str(),(char*)0);
			exit(127);
		}

		if((pid=::waitpid(pid,&status,0))<0){
			err_sys("wait error");
		}
		cout<<"% "<<pid<<endl;
	}
	return 0;
}
Category: unix | Tags: signal
8
24
2010
1

unix 1-6

 

//============================================================================
// Name        : unix.cpp
// Author      : xiaoguozi
// Version     :
// Copyright   : Your copyright notice
// Description : Ansi-style
//============================================================================

#include "apue.h"
#include <dirent.h>
#include <iostream>
#include <sstream>
#include <vector>
#include <sys/wait.h>
#include <errno.h>
using namespace std;
#define BUFSIZE 4096

int main(int argc,char *argv[]) {
	::fprintf(stderr,"EACCES: %s\n",strerror(EACCES));
	errno=ENOENT;
	perror(argv[0]);
	return 0;
}
Category: unix | Tags: strerror perror
8
24
2010
0

unix 1-3

 

//============================================================================
// Name        : unix.cpp
// Author      : xiaoguozi
// Version     :
// Copyright   : Your copyright notice
// Description : read command from stdin to exec,Ansi-style
//============================================================================

#include "apue.h"
#include <dirent.h>
#include <iostream>
#include <sstream>
#include <vector>
#include <sys/wait.h>

using namespace std;
#define BUFSIZE 4096

int main(int argc,char *argv[]) {
	string cmd;
	pid_t	pid;
	int status;
	while(getline(cin,cmd)){
		stringstream ios;
		ios<<cmd;
		string tmp;
		vector<string> vec;
		while(ios>>tmp){
			vec.push_back(tmp);
		}
		if(vec.size()>4){
			err_sys("arguments must less than 4");
		}
		if((pid=fork())<0){
			err_sys("fork error");
		}else if(pid==0){
			if(vec.size()==1)
				execlp(vec[0].c_str(),vec[0].c_str(),(char*)0);
			else if(vec.size()==2)
				::execlp(vec[0].c_str(),vec[0].c_str(),vec[1].c_str(),(char*)0);
			else if(vec.size()==3)
				::execlp(vec[0].c_str(),vec[0].c_str(),vec[1].c_str(),vec[2].c_str(),(char*)0);
			else if(vec.size()==4)
				::execlp(vec[0].c_str(),vec[0].c_str(),vec[1].c_str(),vec[2].c_str(),vec[3].c_str(),(char*)0);
			exit(127);
		}

		if((pid=::waitpid(pid,&status,0))<0){
			err_sys("wait error");
		}
		cout<<"% "<<endl;
	}
	return 0;
}

 

Category: unix | Tags:
8
24
2010
0

unix 1-2 (stdin to stdout)

 

//============================================================================
// Name        : unix.cpp
// Author      : xiaoguozi
// Version     :
// Copyright   : Your copyright notice
// Description : 列出一个目录中的所有文件, Ansi-style
//============================================================================

#include "apue.h"
#include <dirent.h>
#define BUFSIZE 4096

int main(int argc,char *argv[]) {
	int n;
	char buf[BUFSIZE];
	//read 0 end of file , -1 error
	while((n=::read(STDIN_FILENO,buf,BUFSIZE))>0){
		if(::write(STDOUT_FILENO,buf,n)!=n){
			err_sys("write error");
		}
	}
	if(n<0){
		err_sys("read error");
	}
	return 0;
}
Category: unix | Tags:
8
24
2010
0

unix 1-1(ls directory)

 

 

//============================================================================
// Name        : unix.cpp
// Author      : xiaoguozi
// Version     :
// Copyright   : Your copyright notice
// Description : ls all files in special directory , Ansi-style
//============================================================================

#include "apue.h"
#include <dirent.h>


int main(int argc,char *argv[]) {
	DIR *dp;
	struct dirent *dirp;
	if(argc != 2){
		err_quit("usage: ls directory_name");
	}
	if((dp=::opendir(argv[1]))!=NULL){
		while((dirp=::readdir(dp))!=NULL){
			printf("%s\n",dirp->d_name);
		}
	}else{
		err_sys("can't open %s\n",argv[1]);
	}
	::closedir(dp);
	return 0;
}
Category: unix | Tags:

Host by is-Programmer.com | Power by Chito 1.3.3 beta | Theme: Aeros 2.0 by TheBuckmaker.com